fix(player): rodzina DoodStream, warstwy reklamowe nad playerem nie lapia juz stukniec
- DOOD_OVERLAY_JS (injectedJavaScript po zaladowaniu): fixed + z-index > 100000 bez Cloudflare -> pointer-events none, iframe sandbox/srcdoc usuwany; co 700 ms - diagnoza devtools: pelnoekranowy div opacity 0.01 z z 2147463647, iframe reklamowy i pusty kwadrat 80x80 dokladnie na przycisku play; popunder u nas zablokowany, wiec warstwa nigdy nie znikala (zgloszenia e9fc12e8, 1278eb49) - changelog 2026-09-14c, OTA 69b27e52 na 1.3 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
656604e868
commit
f28acf8f0d
2 changed files with 57 additions and 0 deletions
|
|
@ -29,6 +29,13 @@ export type ChangelogEntry = {
|
||||||
};
|
};
|
||||||
|
|
||||||
export const CHANGELOG: ChangelogEntry[] = [
|
export const CHANGELOG: ChangelogEntry[] = [
|
||||||
|
{
|
||||||
|
id: '2026-09-14c',
|
||||||
|
date: 'September 2026',
|
||||||
|
items: [
|
||||||
|
'Movies on playmogo, myvidplay and doply: taps reach the play button again. The host lays an almost invisible ad layer over the player that swallows every tap; the app now disables it once the page has loaded. The human check, when it appears, is untouched.',
|
||||||
|
],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: '2026-09-14b',
|
id: '2026-09-14b',
|
||||||
date: 'September 2026',
|
date: 'September 2026',
|
||||||
|
|
|
||||||
|
|
@ -109,6 +109,55 @@ function isGoneError(msg: string | undefined | null): boolean {
|
||||||
return /\b(404|410)\b|response code:\s*4(0[14])|not found|gone/i.test(msg);
|
return /\b(404|410)\b|response code:\s*4(0[14])|not found|gone/i.test(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Rodzina DoodStreama (playmogo, dood*, myvidplay, doply): INJECTED_JS ich omija, zeby nie
|
||||||
|
// ruszac Turnstile. Ale po przejsciu wyzwania nad playerem zostaja warstwy sieci
|
||||||
|
// reklamowej: pelnoekranowy div fixed z z-index 2147463647 i opacity 0.01 (#d2bkrbp) plus
|
||||||
|
// iframe sandbox srcdoc z reklama. Kazde stukniecie trafia w nie, a nie w przycisk play.
|
||||||
|
// W zwyklej przegladarce pierwszy klik otwiera popunder i warstwa znika; u nas okna sa
|
||||||
|
// zablokowane (setSupportMultipleWindows=false), wiec warstwa zostawala na zawsze i film
|
||||||
|
// „nie gral" (zgloszenia e9fc12e8 i 1278eb49, diagnoza devtools 2026-09-14: video mialo
|
||||||
|
// juz src z cloudatacdn, readyState 0, trzy stukniecia bez efektu).
|
||||||
|
//
|
||||||
|
// Zdejmujemy tylko warstwy, ktore NIE sa Cloudflare (iframe challenges.cloudflare zostaje):
|
||||||
|
// fixed + z-index > 100000 i (prawie niewidoczne, albo iframe reklamowy, albo duze).
|
||||||
|
// Uruchamiane PO zaladowaniu strony (injectedJavaScript), co 700 ms, bo warstwy sa
|
||||||
|
// dokladane pozniej przez skrypty reklam.
|
||||||
|
const DOOD_OVERLAY_JS = `
|
||||||
|
(function () {
|
||||||
|
try {
|
||||||
|
if (!/vik[i1]ngfile\\.|playmogo\\.|dood|d0000d|dooood|do0od|do7go|ds2play|doply\\.|myvidplay\\./i.test(location.hostname)) return;
|
||||||
|
var isCf = function (el) {
|
||||||
|
try {
|
||||||
|
if ((el.src || '').indexOf('challenges.cloudflare') >= 0) return true;
|
||||||
|
if (el.querySelector && el.querySelector('iframe[src*="challenges.cloudflare"]')) return true;
|
||||||
|
} catch (e) {}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
var sweep = function () {
|
||||||
|
var els = document.querySelectorAll('div,iframe,a,span');
|
||||||
|
for (var i = 0; i < els.length; i++) {
|
||||||
|
var el = els[i];
|
||||||
|
var s = getComputedStyle(el);
|
||||||
|
if (s.position !== 'fixed') continue;
|
||||||
|
var z = parseInt(s.zIndex || '0', 10);
|
||||||
|
if (!(z > 100000)) continue;
|
||||||
|
if (isCf(el)) continue;
|
||||||
|
// Kazda warstwa fixed z takim z-indexem, ktora nie jest Cloudflare, to lapacz
|
||||||
|
// klikniec sieci reklamowej: pelnoekranowy div opacity 0.01, iframe sandbox z
|
||||||
|
// reklama albo pusty przezroczysty kwadrat 80x80 polozony DOKLADNIE na przycisku
|
||||||
|
// play (diagnoza devtools 2026-09-14). Player hostera (video.js) nie uzywa fixed.
|
||||||
|
var adFrame = el.tagName === 'IFRAME' && (el.hasAttribute('srcdoc') || el.hasAttribute('sandbox'));
|
||||||
|
el.style.setProperty('pointer-events', 'none', 'important');
|
||||||
|
if (adFrame) { try { el.remove(); } catch (e) {} }
|
||||||
|
}
|
||||||
|
};
|
||||||
|
sweep();
|
||||||
|
setInterval(sweep, 700);
|
||||||
|
} catch (e) {}
|
||||||
|
})();
|
||||||
|
true;
|
||||||
|
`;
|
||||||
|
|
||||||
const DEFAULT_UA =
|
const DEFAULT_UA =
|
||||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36';
|
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36';
|
||||||
|
|
||||||
|
|
@ -2090,6 +2139,7 @@ function EmbedWebViewPlayer({ params }: { params: RouteParams }) {
|
||||||
style={styles.video}
|
style={styles.video}
|
||||||
userAgent={webViewUa}
|
userAgent={webViewUa}
|
||||||
injectedJavaScriptBeforeContentLoaded={INJECTED_JS}
|
injectedJavaScriptBeforeContentLoaded={INJECTED_JS}
|
||||||
|
injectedJavaScript={DOOD_OVERLAY_JS}
|
||||||
onMessage={onMessage}
|
onMessage={onMessage}
|
||||||
onShouldStartLoadWithRequest={onShouldStartLoad}
|
onShouldStartLoadWithRequest={onShouldStartLoad}
|
||||||
onLoadEnd={() => {
|
onLoadEnd={() => {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue