From f28acf8f0d9678c26da309a080d547d1c11f67fe Mon Sep 17 00:00:00 2001 From: goon-foss Date: Mon, 14 Sep 2026 15:40:42 +0200 Subject: [PATCH] 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 --- mobile/src/changelog.ts | 7 ++++ mobile/src/screens/PlayerScreen.tsx | 50 +++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/mobile/src/changelog.ts b/mobile/src/changelog.ts index 1a1c603..7f2e75d 100644 --- a/mobile/src/changelog.ts +++ b/mobile/src/changelog.ts @@ -29,6 +29,13 @@ export type 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', date: 'September 2026', diff --git a/mobile/src/screens/PlayerScreen.tsx b/mobile/src/screens/PlayerScreen.tsx index baa2140..009f39d 100644 --- a/mobile/src/screens/PlayerScreen.tsx +++ b/mobile/src/screens/PlayerScreen.tsx @@ -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); } +// 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 = '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} userAgent={webViewUa} injectedJavaScriptBeforeContentLoaded={INJECTED_JS} + injectedJavaScript={DOOD_OVERLAY_JS} onMessage={onMessage} onShouldStartLoadWithRequest={onShouldStartLoad} onLoadEnd={() => {