כמה שאלות,





// Paste the entire file into Darktalk's Run diagnostics field (not the console).
// Passive capture for complaint 5943 and its source thread 5942. Version 1.
// No probes, playback commands, cookie/storage reads, HTML dumps or uploads.
// The runner also captures ordinary console calls/errors independently.
let remaining = 240;
let routineRemaining = 160; // Reserve events for later navigation/player errors.
const emit = (type, value) => {
if (diagnostics.signal.aborted || remaining <= 0) return;
const routine = /^(viewport|frame-\d+(?:-ancestor-\d+)?)$/.test(type);
if (routine && routineRemaining-- <= 0) return;
remaining--;
diagnostics.log(type, value);
if (!remaining) diagnostics.warn('Script event budget reached; stop and download.');
};
diagnostics.onPage((doc, win) => {
const thread = win.location.pathname.match(/\/threads\/(?:[^/]*\.)?(5942|5943)(?:\/|$)/);
if (!thread) {
emit('outside-scope', 'Open thread 5942 or 5943 in the original tab.');
return;
}
let disposed = false, timer = 0, sequence = 0;
const cleanups = [], frames = new Map(), previous = new Map(), resources = new Set();
const providerHost = host => /(^|\.)(tiktok\.com|tiktokcdn\.com|tiktokv\.com|youtube\.com|youtube-nocookie\.com|youtu\.be|vimeo\.com|dailymotion\.com|dai\.ly)$/.test(host);
const safeUrl = raw => {
if (['inline', 'eval', 'wasm-eval', 'trusted-types-sink', 'trusted-types-policy'].includes(raw)) return { kind: raw };
try {
const url = new URL(raw, doc.baseURI);
if (!/^https?:$/.test(url.protocol)) return { kind: url.protocol };
if (!providerHost(url.hostname)) return { origin: url.origin };
const result = { origin: url.origin, path: url.pathname.slice(0, 180) };
for (const key of ['autoplay', 'controls', 'description', 'music_info', 'muted']) {
if (url.searchParams.has(key)) result[key] = url.searchParams.get(key).slice(0, 20);
}
return result;
} catch { return { kind: 'unavailable' }; }
};
const listen = (target, type, callback, options = false) => {
target.addEventListener(type, callback, options);
cleanups.push(() => target.removeEventListener(type, callback, options));
};
const box = element => {
const rect = element.getBoundingClientRect(), style = win.getComputedStyle(element);
return {
tag: element.tagName,
pageX: Math.round(rect.x + win.scrollX), pageY: Math.round(rect.y + win.scrollY),
width: Math.round(rect.width), height: Math.round(rect.height),
clientWidth: element.clientWidth, clientHeight: element.clientHeight,
scrollWidth: element.scrollWidth, scrollHeight: element.scrollHeight,
display: style.display, visibility: style.visibility, opacity: style.opacity,
overflowX: style.overflowX, overflowY: style.overflowY,
cssHeight: style.height, maxHeight: style.maxHeight,
aspectRatio: style.aspectRatio,
inViewport: rect.width > 0 && rect.height > 0 && rect.bottom > 0 &&
rect.right > 0 && rect.top < win.innerHeight && rect.left < win.innerWidth
};
};
const viewport = () => ({
width: win.innerWidth, height: win.innerHeight,
documentWidth: doc.documentElement.clientWidth,
scrollWidth: doc.documentElement.scrollWidth,
scrollY: Math.round(win.scrollY), focused: doc.hasFocus(),
visibility: doc.visibilityState,
visualWidth: win.visualViewport?.width,
visualHeight: win.visualViewport?.height,
visualOffsetTop: win.visualViewport?.offsetTop,
visualScale: win.visualViewport?.scale
});
const changed = (key, value) => {
const signature = JSON.stringify(value);
if (previous.get(key) === signature) return;
previous.set(key, signature);
emit(key, value);
};
const frameList = () => Array.from(doc.querySelectorAll('.message-body iframe')).slice(0, 12);
const snapshot = () => {
if (disposed || diagnostics.signal.aborted || !remaining) return;
changed('viewport', viewport());
const live = frameList();
changed('embed-counts', {
thread: thread[1], inspectedFrames: live.length,
totalFrames: doc.querySelectorAll('.message-body iframe').length,
consentPlaceholders: doc.querySelectorAll('.message-body [data-xf-init~="cookie-consent-form"] template.js-embedHtml').length,
oembedPlaceholders: doc.querySelectorAll('.message-body [data-xf-init~="oembed"]').length,
oembedFailures: doc.querySelectorAll('.message-body .bbOembed--failure').length
});
for (const [frame, state] of frames) {
if (!live.includes(frame)) {
state.remove();
frames.delete(frame);
emit('frame-removed', { id: state.id });
}
}
for (const frame of live) {
let state = frames.get(frame);
if (!state) {
const id = ++sequence;
const load = () => { emit('frame-load', { id, meaning: 'Load signal only; rendering is unconfirmed.' }); schedule(); };
const error = () => emit('frame-error', { id });
frame.addEventListener('load', load);
frame.addEventListener('error', error);
state = { id, remove: () => {
frame.removeEventListener('load', load);
frame.removeEventListener('error', error);
} };
frames.set(frame, state);
emit('frame-observed', { id, earlierLoadEvents: 'Not recoverable; reload while diagnostics is running.' });
}
changed('frame-' + state.id, {
id: state.id, src: safeUrl(frame.getAttribute('src') || 'about:blank'),
loading: frame.loading, allow: (frame.getAttribute('allow') || '').slice(0, 200),
sandbox: frame.getAttribute('sandbox'),
referrerPolicy: frame.referrerPolicy,
nestedThreadPreview: !!frame.closest('.embed-preview'),
widthAttribute: frame.getAttribute('width'), heightAttribute: frame.getAttribute('height'),
box: box(frame)
});
let parent = frame.parentElement;
for (let depth = 0; parent && depth < 6; depth++, parent = parent.parentElement) {
changed('frame-' + state.id + '-ancestor-' + depth, {
id: state.id, depth,
preview: parent.classList.contains('embed-preview'),
mediaWrapper: parent.classList.contains('bbMediaJustifier'),
box: box(parent)
});
if (parent.classList.contains('message-body')) break;
}
}
};
const schedule = () => {
if (!disposed && !timer && remaining) timer = setTimeout(() => {
timer = 0;
snapshot();
}, 750);
};
const resource = entry => {
if (resources.size >= 60) return;
let url;
try { url = new URL(entry.name); } catch { return; }
const nativeEmbed = url.origin === win.location.origin && /\/(?:oembed\.php|js\/xf\/embed(?:\.min)?\.js)$/.test(url.pathname);
if (!providerHost(url.hostname) && !nativeEmbed) return;
const key = entry.name + ':' + entry.startTime;
if (resources.has(key)) return;
resources.add(key);
emit('resource-timing', {
url: nativeEmbed ? { path: url.pathname } : safeUrl(entry.name),
initiator: entry.initiatorType,
startMs: Math.round(entry.startTime), durationMs: Math.round(entry.duration),
responseStatus: entry.responseStatus > 0 ? entry.responseStatus : null,
note: 'Parent-document timing only; hidden status or missing entries do not prove blocking.'
});
};
emit('environment', {
script: 'firefox-embed-diagnostics-v1', thread: thread[1],
userAgent: win.navigator.userAgent, platform: win.navigator.platform,
language: win.navigator.language, touchPoints: win.navigator.maxTouchPoints,
online: win.navigator.onLine, cookieEnabled: win.navigator.cookieEnabled,
secureContext: win.isSecureContext, direction: win.getComputedStyle(doc.documentElement).direction,
readyState: doc.readyState, devicePixelRatio: win.devicePixelRatio,
aspectRatioSupported: win.CSS?.supports('aspect-ratio', '325 / 578'),
consentMode: win.XF?.config?.cookie?.consentMode,
thirdPartyConsented: win.XF?.config?.cookie?.consented?.includes('_third_party'),
limits: 'No access to provider-frame content, internal requests, Firefox tracking settings or earlier console history.'
});
listen(win, 'message', event => {
const frame = frameList().find(item => item.contentWindow === event.source);
if (!frame) return;
let url;
try { url = new URL(frame.src); } catch { return; }
if (url.hostname !== 'www.tiktok.com' || event.origin !== url.origin) return;
let data = event.data;
if (typeof data === 'string' && data.length < 4096) {
try { data = JSON.parse(data); } catch { return; }
}
if (!data || data['x-tiktok-player'] !== true ||
!['onPlayerReady', 'onStateChange', 'onError', 'onPlayerError'].includes(data.type)) return;
snapshot();
const value = data.value;
emit('tiktok-player', {
id: frames.get(frame)?.id, type: data.type,
stateOrLegacyError: typeof value === 'number' ? value : null,
errorCode: typeof value?.errorCode === 'number' ? value.errorCode : null,
errorType: typeof value?.errorType === 'string' ? value.errorType.slice(0, 80) : null
});
});
listen(doc, 'securitypolicyviolation', event => emit('csp-violation', {
directive: event.effectiveDirective, disposition: event.disposition,
blocked: safeUrl(event.blockedURI)
}));
listen(doc, 'error', event => {
const element = event.target;
if (element?.tagName !== 'IFRAME' && element?.tagName !== 'SCRIPT') return;
let url;
try { url = new URL(element.src); } catch { return; }
if (providerHost(url.hostname) || /\/js\/xf\/embed/.test(url.pathname)) {
emit('resource-error', { tag: element.tagName, url: safeUrl(url.href) });
}
}, true);
for (const name of ['resize', 'scroll', 'focus', 'blur', 'online', 'offline']) listen(win, name, schedule, { passive: true });
for (const name of ['visibilitychange', 'embed:loaded', 'cookie-consent:load']) listen(doc, name, schedule, true);
if (win.visualViewport) {
listen(win.visualViewport, 'resize', schedule);
listen(win.visualViewport, 'scroll', schedule);
}
const observer = new win.MutationObserver(schedule);
observer.observe(doc.body, {
subtree: true, childList: true, attributes: true,
attributeFilter: ['src', 'class', 'style', 'hidden', 'loading', 'allow', 'sandbox']
});
cleanups.push(() => observer.disconnect());
try {
const performanceObserver = new win.PerformanceObserver(list => list.getEntries().forEach(resource));
performanceObserver.observe({ type: 'resource', buffered: true });
cleanups.push(() => performanceObserver.disconnect());
} catch {
win.performance.getEntriesByType('resource').forEach(resource);
emit('performance-observer', 'Unavailable; only existing parent-document entries captured.');
}
const poll = setInterval(snapshot, 5000);
cleanups.push(() => clearInterval(poll));
snapshot();
return () => {
disposed = true;
clearTimeout(timer);
for (const state of frames.values()) state.remove();
for (const cleanup of cleanups.reverse()) cleanup();
frames.clear();
};
});
await diagnostics.untilStopped();
אתה יכול לבדוק מחדש?
תודה וסליחה על הטרחה, אבל הנה קוד נוסף, תריץ אותו ואל תעשה כלום הפעם, הוא יפעל לבד ויסתיים לבד, כשיהיה כתוב שהאבחון הסתיים תוריד את הפלט....
// Paste this entire file into DarkTalk's Run diagnostics field.
// Start on any DarkTalk page and leave both tabs open. The script navigates the
// original tab, checks both threads and then enables Download output.
// In a background tab it requests loading of the matching autoplay-off player.
// It does not play the video, change consent or browser settings, or upload data.
const CLIP = '7700717942605876487';
const PREVIEW = '.message-body [data-embed-content="thread-5942"] .embed-preview';
const PLACEHOLDER = `[data-xf-init~="oembed"][data-provider="tiktok"][data-id="${CLIP}"]`;
const PLAYER_ORIGIN = 'https://www.tiktok.com';
const threadId = path => path.match(/\/threads\/(?:[^/]*\.)?(5942|5943)(?:\/|$)/)?.[1];
const playerUrl = raw => {
try {
const url = new URL(raw);
if (url.origin === PLAYER_ORIGIN &&
[`/player/v1/${CLIP}`, `/embed/v2/${CLIP}`].includes(url.pathname)) return url;
} catch {}
return null;
};
let currentPage = null;
function findEmbed(page) {
const { doc, thread } = page;
const preview = thread === '5943' ? doc.querySelector(PREVIEW) : null;
const scope = thread === '5943' ? preview : doc;
if (!scope) return { preview };
const inPost = element => !!element.closest('.message-body') &&
(thread === '5943' || !element.closest('.embed-preview'));
const frame = Array.from(scope.querySelectorAll(`iframe[src*="${CLIP}"]`))
.find(element => inPost(element) && playerUrl(element.src));
const placeholder = Array.from(scope.querySelectorAll(PLACEHOLDER)).find(inPost);
const consent = Array.from(scope.querySelectorAll('form[data-xf-init~="cookie-consent-form"]'))
.find(form => {
if (!inPost(form)) return false;
const markup = form.querySelector('template.js-embedHtml')?.content;
return !!markup?.querySelector(`${PLACEHOLDER}, iframe[src*="${CLIP}"]`);
});
return { preview, frame, placeholder, consent };
}
function captureTiming(page, entry) {
let url;
try { url = new URL(entry.name); } catch { return; }
const native = url.origin === page.origin && /\/oembed\.php$/.test(url.pathname) &&
url.searchParams.get('provider') === 'tiktok' && url.searchParams.get('id') === CLIP;
const provider = playerUrl(url.href);
if ((!native && !provider) || page.timings.size >= 20) return;
const key = `${native ? 'native' : 'tiktok'}:${entry.startTime}`;
if (page.timings.has(key)) return;
page.timings.add(key);
const responseStatus = entry.responseStatus > 0 ? entry.responseStatus : null;
if (native) {
page.nativeRequest = true;
if (responseStatus !== null) page.nativeStatus = responseStatus;
} else {
page.playerRequest = true;
if (responseStatus !== null) page.playerStatus = responseStatus;
}
diagnostics.log('resource-timing', {
thread: page.thread, resource: native ? '/oembed.php' : url.pathname,
initiator: entry.initiatorType, responseStatus, durationMs: Math.round(entry.duration)
});
}
diagnostics.onPage((doc, win) => {
const page = {
doc, win, thread: threadId(win.location.pathname), origin: win.location.origin,
timings: new Set(), eagerFrames: new Set(), messageCount: 0
};
currentPage = page;
let observer;
if (page.thread) {
diagnostics.listen(win, 'message', event => {
if (event.origin !== PLAYER_ORIGIN) return;
const { frame } = findEmbed(page);
if (!frame || frame.contentWindow !== event.source) return;
let data = event.data;
if (typeof data === 'string' && data.length < 4096) {
try { data = JSON.parse(data); } catch { return; }
}
if (!data || data['x-tiktok-player'] !== true ||
!['onPlayerReady', 'onStateChange', 'onError', 'onPlayerError'].includes(data.type)) return;
const code = typeof data.value?.errorCode === 'number' ? data.value.errorCode :
typeof data.value === 'number' ? data.value : null;
if (data.type === 'onPlayerReady') page.playerReady = true;
if (data.type === 'onStateChange' && code === 1) page.playerPlaying = true;
if (data.type === 'onError' || data.type === 'onPlayerError') {
page.playerError = true;
page.playerErrorCode = code;
}
if (page.messageCount++ < 20) diagnostics.log('tiktok-player', { thread: page.thread, type: data.type, code });
});
for (const type of ['load', 'error']) {
diagnostics.listen(doc, type, event => {
if (event.target.tagName !== 'IFRAME' || event.target !== findEmbed(page).frame) return;
if (type === 'load') page.frameLoadEvent = true;
else page.frameErrorEvent = true;
}, true);
}
diagnostics.listen(doc, 'securitypolicyviolation', event => {
if (!['frame-src', 'child-src'].includes(event.effectiveDirective) ||
!(event.blockedURI === PLAYER_ORIGIN || playerUrl(event.blockedURI))) return;
if (event.disposition === 'enforce') page.cspFrameBlock = true;
diagnostics.log('frame-csp', {
thread: page.thread, directive: event.effectiveDirective, disposition: event.disposition
});
});
try {
observer = new win.PerformanceObserver(list => {
if (currentPage !== page || diagnostics.signal.aborted) return;
for (const entry of list.getEntries()) captureTiming(page, entry);
});
observer.observe({ type: 'resource', buffered: true });
} catch { observer?.disconnect(); }
}
return () => {
observer?.disconnect();
for (const frame of page.eagerFrames) {
if (frame.loading === 'eager') frame.loading = 'lazy';
}
if (currentPage === page) currentPage = null;
};
});
async function waitFor(read, milliseconds) {
const deadline = performance.now() + milliseconds;
while (performance.now() < deadline) {
const value = read();
if (value) return value;
await diagnostics.sleep(200);
}
return null;
}
function frameBox(page, frame) {
const rect = frame.getBoundingClientRect();
const style = page.win.getComputedStyle(frame);
return {
width: Math.round(rect.width), height: Math.round(rect.height),
display: style.display, visibility: style.visibility,
inViewport: style.visibility === 'visible' && rect.width > 0 && rect.height > 0 &&
rect.bottom > 0 && rect.right > 0 &&
rect.top < page.win.innerHeight && rect.left < page.win.innerWidth
};
}
async function inspect(page) {
let scrolled, firstFrameObservedAt, finalFrame, box;
let previewFound = false, consentFound = false, placeholderFound = false, nativeFailure = false;
diagnostics.log('page-check-started', { thread: page.thread, readyState: page.doc.readyState });
await waitFor(() => {
if (currentPage !== page) return true;
const { preview, frame, placeholder, consent } = findEmbed(page);
previewFound ||= !!preview;
placeholderFound ||= !!placeholder;
consentFound ||= !!consent;
nativeFailure ||= !!placeholder?.classList.contains('bbOembed--failure');
if (page.doc.visibilityState !== 'visible' && frame?.loading === 'lazy' &&
playerUrl(frame.src)?.searchParams.get('autoplay') === '0' && !page.eagerFrames.has(frame)) {
page.eagerFrames.add(frame);
frame.loading = 'eager';
}
const element = frame || placeholder || consent || preview;
if (element && element !== scrolled) {
element.scrollIntoView({ block: 'center', inline: 'nearest', behavior: 'instant' });
scrolled = element;
}
box = frame ? frameBox(page, frame) : null;
if (frame !== finalFrame) firstFrameObservedAt = frame ? performance.now() : undefined;
finalFrame = frame;
return firstFrameObservedAt !== undefined && performance.now() - firstFrameObservedAt >= 9000;
}, 16000);
if (currentPage === page) {
for (const entry of page.win.performance.getEntriesByType('resource')) captureTiming(page, entry);
}
const url = finalFrame && playerUrl(finalFrame.src);
const tabVisibleAtEnd = currentPage === page && page.doc.visibilityState === 'visible';
const outcome = currentPage !== page ? 'page-changed-during-check' :
page.cspFrameBlock ? 'page-csp-blocked-frame' :
page.playerError ? 'tiktok-reported-error' :
page.playerPlaying ? 'tiktok-reported-playing' :
page.playerReady ? 'tiktok-reported-ready' :
page.frameErrorEvent ? 'frame-error-event' :
nativeFailure ? 'native-oembed-failed' :
consentFound && !finalFrame ? 'waiting-for-site-consent' :
finalFrame && !tabVisibleAtEnd ? 'background-frame-no-player-signal' :
box?.inViewport ? 'frame-in-view-no-player-signal' :
finalFrame ? 'frame-observed-outside-viewport' : 'frame-not-observed';
return {
thread: page.thread, outcome, tabVisibleAtEnd, previewFound, placeholderFound, nativeFailure, consentFound,
nativeRequestObserved: !!page.nativeRequest, nativeStatus: page.nativeStatus ?? null,
playerRequestObserved: !!page.playerRequest, playerStatus: page.playerStatus ?? null,
frame: box ?? null, autoplay: url?.searchParams.get('autoplay') ?? null,
backgroundLoadRequested: page.eagerFrames.size > 0,
frameLoadEvent: !!page.frameLoadEvent, playerReady: !!page.playerReady,
playerErrorCode: page.playerErrorCode ?? null,
observationMs: firstFrameObservedAt === undefined ? null : Math.round(performance.now() - firstFrameObservedAt)
};
}
const script = 'firefox-embed-auto-diagnostics-v2';
const initial = await waitFor(() => currentPage, 8000);
if (!initial) return { script, outcome: 'The original DarkTalk tab was unavailable.' };
diagnostics.log('automatic-check', {
script, initialThread: initial.thread ?? null, userAgent: initial.win.navigator.userAgent,
note: 'Leave both tabs open while the script checks the complaint and the source thread.'
});
const checks = [];
let previous = initial;
for (const thread of ['5943', '5942']) {
if (currentPage !== previous) {
checks.push({ thread, outcome: 'page-changed-before-check' });
break;
}
if (previous.thread === thread) previous.win.location.reload();
else previous.win.location.assign(new URL(`/threads/${thread}/`, previous.origin).href);
const page = await waitFor(() => currentPage && currentPage.doc !== previous.doc ? currentPage : null, 12000);
if (page?.thread !== thread) {
checks.push({ thread, outcome: page ? 'unexpected-page' : 'navigation-timeout' });
break;
}
const check = await inspect(page);
checks.push(check);
diagnostics.log('page-check-completed', check);
previous = page;
}
return {
script, checks,
interpretation: 'A frame load or missing player signal cannot establish rendering or Firefox tracking protection. TikTok readiness only confirms the player responded.'
};
תודה וסליחה על הטרחה, אבל הנה קוד נוסף, תריץ אותו ואל תעשה כלום הפעם, הוא יפעל לבד ויסתיים לבד, כשיהיה כתוב שהאבחון הסתיים תוריד את הפלט.
הקוד יפתח לך את הדפים עצמו ויבדוק אותם:
תודה לך על הסבלנות....
כן, אם אני מעביר אותו לבסיסי או מכבה אותו זה עובדתודה לך על הסבלנות.
תגיד, ניסית לכבות רגע את החוסם-מעקב של פיירפוקס ולראות אם האמבדים עובדים?
אתה אומר שזה עובד אם אתה מכבה את זה?
אתה לא יכול לשים חריגה לאתר בפיירפוקס?כן, אם אני מעביר אותו לבסיסי או מכבה אותו זה עובד
אבל בעבר זה כן עבד גם על מצב מחמיר, הוא תמיד פעל אצלי והטיקטוק כן עבד ומתישהו הפסיק לעבוד
טוב, בינתיים זה תקלה אצל פיירפוקסאבל קודם לכן זה עבד
אתה לא יכול להחזיר את האתר אחורה למתי שזה כן עבד?טוב, בינתיים זה תקלה אצל פיירפוקס
אצל האתר KNOWYOUREMEME הם עשו חריגה וזה נותן לטיקטוקים לעבוד שם אבל לנו לא
אז כרגע זה המציאות, אתה יכול להחריג את האתר מהאנטי-מעקב הזה, אתה יכול פשוט לשים יובלוק בדפדפן כי זה פיירפוקס ולחסום פרסומות פשוט והטיקטוק כנראה יעבוד