在所有YouTube頁面上阻止縮圖懸停預覽(WebP和視頻)並停止頻道預告片(視頻+音頻)。保留進度條和播放按鈕。無需登錄或權限,頁面載入時執行。
目前為
// ==UserScript==
// @name YouTube - Block Autoplay Preview & Channel Trailer
// @name:ar يوتيوب - حظر معاينة التشغيل التلقائي وإعلان القناة
// @name:bg YouTube - Блокиране на Автоматично Възпроизвеждане на Преглед и Трейлър на Канал
// @name:ca YouTube - Bloqueja Previsualització de Reproducció Automàtica i Tràiler del Canal
// @name:cs YouTube - Blokovat Autoplay Náhled a Trailer Kanálu
// @name:cy YouTube - Bloc Rhagddangos Chwarae Awtomatig a Threilar Sianel
// @name:da YouTube - Blokér Autoplay-Forhåndsvisning og Kanaltrailer
// @name:de YouTube - Autoplay-Vorschau und Kanaltrailer Blockieren
// @name:el YouTube - Μπλοκάρει Προεπισκόπηση Αυτόματης Αναπαραγωγής και Τρέιλερ Καναλιού
// @name:eo YouTube - Bloki Aŭtomatan Antaŭrigardon kaj Kanalan Antaŭfilmon
// @name:es YouTube - Bloquear Vista Previa de Reproducción Automática y Tráiler del Canal
// @name:et YouTube - Blokeeri Autoplay Eelvaade ja Kanali Treiler
// @name:eu YouTube - Autoplay Aurrebista eta Kanaleko Trailerra Blokeatu
// @name:fi YouTube - Estä Autotoiston Esikatselu ja Kanavan Traileria
// @name:fr YouTube - Bloquer Aperçu Lecture Automatique et Bande-annonce de Chaîne
// @name:fr-CA YouTube - Bloquer Aperçu Lecture Automatique et Bande-annonce de Chaîne
// @name:gl YouTube - Bloquear Vista Previa de Reprodución Automática e Tráiler do Canal
// @name:he YouTube - חסום תצוגה מקדימה אוטומטית וטריילר ערוץ
// @name:hi YouTube - ऑटोप्ले पूर्वावलोकन और चैनल ट्रेलर ब्लॉक करें
// @name:hr YouTube - Blokiraj Automatski Pregled i Trailer Kanala
// @name:hu YouTube - Autoplay Előnézet és Csatorna Előzetes Blokkolása
// @name:id YouTube - Blokir Pratinjau Putar Otomatis dan Trailer Saluran
// @name:is YouTube - Blokera Sjálfvirka Forskoðun og Rásarstiklu
// @name:it YouTube - Blocca Anteprima Riproduzione Automatica e Trailer del Canale
// @name:ja YouTube - 自動再生プレビューとプレビューとチャンネルトレーラーをブロック
// @name:ka YouTube - ავტომატური წინასწარი ჩვენებისა და არხის ტრეილერის ბლოკირება
// @name:ko YouTube - 자동 재생 미리보기 및 채널 예고편 차단
// @name:lt YouTube - Blokuoja Autoplay Peržiūrą ir Kanalo Anonsą
// @name:lv YouTube - Bloķēt Autoplay Priekšskatījumu un Kanāla Treileri
// @name:ms YouTube - Blok Pratinjau Putar Automatik dan Treler Saluran
// @name:nb YouTube - Blokker Forhåndsvisning av Autoplay og Kanaltrailer
// @name:nl YouTube - Blokkeer Automatische Afspeelvoorbeeld en Kanaaltrailer
// @name:no YouTube - Blokker Autoplay-Forhåndsvisning og Kanaltrailer
// @name:pl YouTube - Blokuj Podgląd Automatycznego Odtwarzania i Zwiastun Kanału
// @name:pt-BR YouTube - Bloquear Prévia de Reprodução Automática e Trailer do Canal
// @name:ro YouTube - Blochează Previzualizare Redare Automată și Trailer de Canal
// @name:ru YouTube - Блокировать Автовоспроизведение Превью и Трейлер Канала
// @name:sk YouTube - Blokovať Autoplay Náhľad a Ukážku Kanála
// @name:sl YouTube - Blokiraj Samodejni Predogled in Napovednik Kanala
// @name:sq YouTube - Bllokoni Parapamjen e Riprodhimit Automatike dhe Trailerin e Kanalit
// @name:sr YouTube - Blokiraj Automatsko Reprodukciju Pregleda i Trejler Kanala
// @name:sv YouTube - Blockera Autoplay-Förhandsgranskning och Kanaltrailer
// @name:th YouTube - บล็อกตัวอย่างการเล่นอัตโนมัติและตัวอย่างช่อง
// @name:tr YouTube - Otomatik Oynatma Önizlemesini ve Kanal Fragmanını Engelle
// @name:ug يوتيۇب - ئاپتوماتىك كۆرۈش ئالدىن كۆرۈش ۋە قانال تىزىرلىقىنى چەكلەش
// @name:uk YouTube - Блокувати Автовідтворення Попереднього Перегляду та Трейлер Каналу
// @name:vi YouTube - Chặn Xem Trước Tự Động Khi Hover & Trailer Kênh
// @name:zh-CN YouTube - 阻止自动播放预览和频道预告片
// @name:zh-TW YouTube - 阻止自動播放預覽和頻道預告片
// @description Blocks YouTube thumbnail hover previews (WebP & video) and stops channel trailers (video + audio). Keeps progress bars and play buttons. Works on all pages, no login or permissions needed, runs at document-start.
// @description:ar يحظر معاينات الصور المصغرة عند التمرير (WebP وفيديو) ويوقف إعلانات القناة (فيديو + صوت). يحافظ على أشرطة التقدم وأزرار التشغيل. يعمل على جميع الصفحات، بدون تسجيل دخول أو أذونات، يبدأ فور تحميل الصفحة.
// @description:bg Блокира предварителни прегледи при навеждане на миниатюри (WebP и видео) и спира трейлърите на канали (видео + звук). Запазва лентите за напредък и бутоните за възпроизвеждане. Работи на всички страници, без вход или разрешения, стартира при зареждане на страницата.
// @description:ca Bloqueja les visualitzacions prèvies de les miniatures en passar-hi per sobre (WebP i vídeo) i atura els tràilers del canal (vídeo + àudio). Manté les barres de progrés i els botons de reproducció. Sense inici de sessió ni permisos, s'executa al carregament de la pàgina.
// @description:cs Blokuje náhledy miniaturek při najetí myší (WebP a video) a zastavuje trailery kanálů (video + zvuk). Zachovává ukazatele postupu a tlačítka přehrávání. Bez přihlášení nebo oprávnění, spouští se při načtení stránky.
// @description:cy Bloc rhagddangos thumbnail hover (WebP a fideo) ac atal treilars sianel (fideo + sain). Cadw bariau cynnydd a botymau chwarae. Dim mewngofnodi na chaniatâd, yn rhedeg wrth lwytho'r dudalen.
// @description:da Blokerer miniature-hover-forhåndsvisninger (WebP og video) og stopper kanaltrailere (video + lyd). Bevarer fremskridtsmærker og afspilningsknapper. Ingen login eller tilladelser, kører ved sideindlæsning.
// @description:de Blockiert Hover-Vorschauen von Thumbnails (WebP & Video) und stoppt Kanaltrailer (Video + Ton). Behält Fortschrittsbalken und Play-Buttons bei. Kein Login oder Berechtigungen erforderlich, startet beim Seitenladen.
// @description:el Μπλοκάρει προεπισκοπήσεις εικόνων miniature κατά το hover (WebP και βίντεο) και σταματά τρέιλερ καναλιών (βίντεο + ήχος). Διατηρεί γραμμές προόδου και κουμπιά αναπαραγωγής. Χωρίς σύνδεση ή άδειες, εκτελείται κατά τη φόρτωση σελίδας.
// @description:eo Blokas miniaturojn hover antaŭrigardojn (WebP & video) kaj haltigas kanalajn antaŭfilmojn (video + sono). Konservas progresajn stangojn kaj ludbutonojn. Sen ensaluto aŭ permesoj, lanĉiĝas ĉe ŝarĝo de paĝo.
// @description:es Bloquea vistas previas de miniaturas al pasar el mouse (WebP y video) y detiene tráilers de canal (video + audio). Mantiene barras de progreso y botones de reproducción. Sin inicio de sesión ni permisos, se ejecuta al cargar la página.
// @description:et Blokeerib thumbnail-kursorilähisvaadet (WebP ja video) ja peatab kanalite treilerid (video + heli). Säilitab edenemisribad ja esitusnupud. Ilma sisselogimise või lubadeta, käivitub lehe laadimisel.
// @description:eu Aurrebista blokeatu thumbnail hover (WebP eta bideoa) eta gelditu kanalaren trailerrak (bideoa + audioa). Mantentzen ditu aurrerapen-barrak eta erreproduzitzeko botoiak. Saioa hasi gabe eta baimenik gabe, orria kargatzean exekutatzen da.
// @description:fi Estää thumbnail-kohdistus-esikatselut (WebP ja video) ja pysäyttää kanavan trailerit (video + ääni). Säilyttää edistymispalkit ja toistonapit. Ei kirjautumista tai lupia, käynnistyy sivun latautuessa.
// @description:fr Bloque les aperçus au survol des miniatures (WebP et vidéo) et arrête les bandes-annonces de chaîne (vidéo + son). Conserve les barres de progression et boutons de lecture. Sans connexion ni permission, s'exécute au chargement de la page.
// @description:fr-CA Bloque les aperçus au survol des miniatures (WebP et vidéo) et arrête les bandes-annonces de chaîne (vidéo + son). Conserve les barres de progression et boutons de lecture. Sans connexion ni permission, s'exécute au chargement de la page.
// @description:gl Bloquea as vistas previas de miniaturas ao pasar o rato (WebP e vídeo) e detén os tráilers do canal (vídeo + son). Mantén as barras de progreso e os botóns de reprodución. Sen inicio de sesión nin permisos, execútase ao cargar a páxina.
// @description:he חוסם תצוגות מקדימות של תמונות ממוזערות (WebP ווידאו) ועוצר טריילרים של ערוצים (וידאו + קול). שומר על סרגלי התקדמות וכפתורי ניגון. ללא כניסה או הרשאות, פועל בטעינת הדף.
// @description:hi YouTube थंबनेल होवर पूर्वावलोकन (WebP और वीडियो) और चैनल ट्रेलर (वीडियो + ऑडियो) ब्लॉक करता है। प्रोग्रेस बार और प्ले बटन रखता है। सभी पेजों पर काम करता है, लॉगिन या अनुमति नहीं चाहिए, पेज लोड होते ही चलता है।
// @description:hr Blokira preglede pri lebdenju na sličicama (WebP i video) i zaustavlja trailere kanala (video + zvuk). Zadržava trake napretka i tipke za reprodukciju. Bez prijave ili dozvola, pokreće se pri učitavanju stranice.
// @description:hu Blokkolja a miniatűr hover előnézeteket (WebP és video) és megállítja a csatorna előzeteseit (video + hang). Megtartja a folyamatjelzőket és lejátszási gombokat. Bejelentkezés vagy engedély nélkül, oldal betöltésekor fut.
// @description:id Memblokir pratinjau hover thumbnail (WebP & video) dan menghentikan trailer saluran (video + audio). Menjaga bilah kemajuan dan tombol putar. Tanpa login atau izin, berjalan saat halaman dimuat.
// @description:is Blokkar forsýnispillist fyrirsýni á öllum YouTube síðum (WebP og video) og stöðvar rásarstiklur (myndskeið + hljóð). Heldur áfram framfara stöng og spila hnöppum. Engin innskráning eða heimild, keyrir við hleðslu síðu.
// @description:it Blocca anteprime hover su miniature (WebP e video) e ferma i trailer dei canali (video + audio). Mantiene barre di avanzamento e pulsanti play. Nessun login o permessi, si avvia al caricamento della pagina.
// @description:ja YouTubeのすべてのページでサムネイルのホバー時プレビュー(WebPおよびビデオ)とチャンネルトレーラー(ビデオ+音声)をブロックします。進捗バーと再生ボタンを保持。ログインや権限不要、ページ読み込み時に実行。
// @description:ka ბლოკავს მინიატურების ჰოვერ წინასწარ ჩვენებას (WebP & ვიდეო) და აჩერებს არხის ტრეილერებს (ვიდეო + ხმა). ინახავს პროგრესის ზოლებსა და დაკვრის ღილაჩებს. შესვლა ან ნებართვა არაა საჭირო, გვერდის ჩატვირთვისას მუშაობს.
// @description:ko 모든 YouTube 페이지에서 썸네일 호버 미리보기(WebP 및 비디오)와 채널 예고편(비디오 + 오디오)을 차단합니다. 진행 막대와 재생 버튼을 유지합니다. 로그인이나 권한 불필요, 페이지 로드 시 실행.
// @description:lt Blokuoti miniatiūrų užvedimo peržiūras (WebP ir vaizdo įrašus) ir sustabdyti kanalų anonsus (vaizdo įrašas + garsas). Išlaiko pažangos juostas ir grojimo mygtukus. Be prisijungimo ar leidimų, veikia puslapio įkėlimo metu.
// @description:lv Bloķē sīktēlu pārslēgšanās priekšskatījumu (WebP un video) un aptur kanāla treilerus (video + audio). Saglabā progresa joslas un atskaņošanas pogas. Bez pieteikšanās vai atļaujām, darbojas lapas ielādes laikā.
// @description:ms Menghalang pratinjau hover thumbnail (WebP & video) dan menghentikan treler saluran (video + audio). Menyimpan bar kemajuan dan butang main. Tiada log masuk atau kebenaran, dijalankan semasa halaman dimuat.
// @description:nb Blokkerer forhåndsvisninger av miniatyrbilder ved svev (WebP og video) og stopper kanaltrailere (video + lyd). Beholder fremdriftslinjer og avspillingsknapper. Ingen innlogging eller tilladelser, kjører ved sidelasting.
// @description:nl Blokkeert hover-voorbeelden van thumbnails (WebP en video) en stopt kanaaltrailers (video + audio). Behoudt voortgangsbalken en afspeelknoppen. Geen login of toestemming, start bij paginalading.
// @description:no Blokkerer forhåndsvisninger av miniatyrer ved svev (WebP og video) og stopper kanaltrailere (video + lyd). Beholder fremdriftslinjer og avspillingsknapper. Ingen innlogging eller tilladelser, kjører ved sidelasting.
// @description:pl Blokuje podglądy miniaturek przy najechaniu myszą (WebP i wideo) oraz zatrzymuje zwiastuny kanałów (wideo + dźwięk). Zachowuje paski postępu i przyciski odtwarzania. Bez logowania i uprawnień, uruchamia się przy ładowaniu strony.
// @description:pt-BR Bloqueia prévias de miniaturas ao passar o mouse (WebP e vídeo) e interrompe trailers de canal (vídeo + áudio). Mantém barras de progresso e botões de play. Sem login ou permissão, executa ao carregar a página.
// @description:ro Blochează previzualizări la hover pe miniaturi (WebP și video) și oprește trailerele de canal (video + audio). Păstrează barele de progres și butoanele de redare. Fără login sau permisiuni, rulează la încărcarea paginii.
// @description:ru Блокирует превью при наведении на миниатюры (WebP и видео) и останавливает трейлеры каналов (видео + звук). Сохраняет индикаторы прогресса и кнопки воспроизведения. Без входа или разрешений, запускается при загрузке страницы.
// @description:sk Blokuje náhľady miniatúr pri prechode myšou (WebP a video) a zastavuje ukážky kanálov (video + zvuk). Zachováva ukazovatele postupu a tlačidlá prehrávania. Bez prihlásenia alebo povolení, spúšťa sa pri načítaní stránky.
// @description:sl Blokira predoglede sličic ob preletu (WebP in video) in ustavi napovednike kanalov (video + zvok). Ohrani vrstice napredka in gumbe za predvajanje. Brez prijave ali dovoljenj, zažene ob nalaganju strani.
// @description:sq Bllokon parapamjen e hover thumbnail (WebP dhe video) dhe ndalon trailerat e kanalit (video + audio). Mbaj shirita përparimi dhe butona luajtjeje. Pa hyrje ose leje, ekzekutohet gjatë ngarkimit të faqes.
// @description:sr Blokira preglede pri lebdećem pokazivaču na sličicama (WebP i video) i zaustavlja trejlere kanala (video + zvuk). Zadržava trake napretka i dugmiće za reprodukciju. Bez prijave ili dozvola, pokreće se pri učitavanju stranice.
// @description:sv Blockerar förhandsgranskningar vid hovring på miniatyrer (WebP och video) och stoppar kanaltrailers (video + ljud). Behåller förloppsindikatorer och uppspelningsknappar. Ingen inloggning eller behörighet, körs vid sidladdning.
// @description:th บล็อกตัวอย่างการเลื่อนเมาส์บนรูปย่อ (WebP และวิดีโอ) และหยุดตัวอย่างช่อง (วิดีโอ + เสียง) รักษาแถบความคืบหน้าและปุ่มเล่น ไม่ต้องล็อกอินหรืออนุญาต ทำงานเมื่อโหลดหน้าเว็บ
// @description:tr Tüm YouTube sayfalarında küçük resim hover önizlemelerini (WebP ve video) ve kanal fragmanlarını (video + ses) engeller. İlerleme çubuklarını ve oynat düğmelerini korur. Giriş veya izin gerekmez, sayfa yüklenirken çalışır.
// @description:ug بارلىق YouTube بەتلىرىدە كىچىك رەسىم hover ئالدىن كۆرۈشلىرىنى (WebP & ۋىدىيو) ۋە قانال تىزىرلىقلىرىنى (ۋىدىيو + ئاۋاز) چەكلەيدۇ. ئىلگىرىلەش تارىمىقى ۋە ئويناش كۇنۇپكىلىرىنى ساقلايدۇ. كىرىش ياكى ئىجازەت تەلەپ قىلمايدۇ، بەت يۈكلەنگەندە ئىجرا بولىدۇ.
// @description:uk Блокує попередній перегляд при наведенні на мініатюри (WebP та відео) та зупиняє трейлери каналів (відео + звук). Зберігає смуги прогресу та кнопки відтворення. Без входу чи дозволів, запускається при завантаженні сторінки.
// @description:vi Chặn hiệu ứng xem trước khi hover thumbnail (ảnh động WebP & video) và dừng trailer kênh (video + âm thanh). Giữ nguyên thanh tiến độ, nút play và ảnh tĩnh. Không cần đăng nhập, không cần quyền, chạy ngay khi tải trang.
// @description:zh-CN 在所有YouTube页面上阻止缩略图悬停预览(WebP和视频)并停止频道预告片(视频+音频)。保留进度条和播放按钮。无需登录或权限,页面加载时运行。
// @description:zh-TW 在所有YouTube頁面上阻止縮圖懸停預覽(WebP和視頻)並停止頻道預告片(視頻+音頻)。保留進度條和播放按鈕。無需登錄或權限,頁面載入時執行。
// @namespace https://greasyfork.org/users/979364-miebie-1412
// @author miebie.1412
// @version 1.2.1
// @match https://www.youtube.com/*
// @match http://www.youtube.com/*
// @match https://youtube.com/*
// @match http://youtube.com/*
// @grant none
// @run-at document-start
// @license MIT
// @homepageURL https://greasyfork.org/en/users/979364-miebie-1412
// @supportURL https://greasyfork.org/en/users/979364-miebie-1412
// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABm0lEQVR4AdSWAZaCIBRFaTY2tbJsZTUra979iqECYqLWHJ4IfP67cMLhxx38NwF4Onfu1KiurfN4vQMAGd4V4HXVe23dOw+lbksP0A1MCNuwqk92mEVaUgOQOcbIOnd4AGF+BiBDa6jevXiA3Y1laIs+EkAMzn0FwEOoN+kS6uTcaSznnI8h3kvd6TK3AzeZXKRGeoSKpQzGiTcpDihV8ZIDwLCJTyvvBUrR7KKqackB/E3DXz36dqyGI1sOgPGoZM4Ruqp+SiUgycW8BTCiAqQEYjStbdYAIBMQ7AY7Q7tYtQAwTP7QGEypFoA/rosh1gJgaN+J1Arn+nMAvzOTl6w6mSsHkPTn4yK9/csPE+cA+ktDOGHpe/edSJ6OHABe3OHCi2kSSkY2FtTM4+rFvZJcUc0BMIkEXiQEijM/kAJtLKiZk1y54qyUAFjgVo+PAeA8b7XIbN4jd8AWbQA60zRQlrbiIJcd8zMAEguCq5N10t5QmONlFj0ArQ6CQX+hrFmTl/8b1NiZBgD0CAJCu1DqfXUd5CDvZIf/AQAA//8BTt4CAAAABklEQVQDALNfokFDr0z6AAAAAElFTkSuQmCC
// ==/UserScript==
(function() {
'use strict';
// === CSS: Block previews + hide trailers ===
const css = `
ytd-moving-thumbnail-renderer,
ytd-thumbnail-overlay-resume-playback-renderer,
ytd-thumbnail-overlay-loading-preview-renderer,
ytd-video-preview,
video[src*="an_webp"], video[src*="video-preview"],
img[src*="an_webp"], img[src*="video-preview"] {
display: none !important;
}
ytd-thumbnail img { opacity: 1 !important; }
ytd-thumbnail-overlay-resume-playback-renderer[style*="width"],
#thumbnail-overlay-play { display: block !important; }
ytd-channel-video-player-renderer,
.ytd-channel-video-player-renderer,
[is="ytd-channel-video-player-renderer"],
ytd-rich-shelf-renderer[is-prominent-shelf],
ytd-rich-shelf-renderer video,
.channel-trailer,
[data-purpose="channel-trailer"],
ytd-compact-video-renderer video,
ytd-video-primary-info-renderer video {
display: none !important;
visibility: hidden !important;
opacity: 0 !important;
height: 0 !important;
width: 0 !important;
overflow: hidden !important;
pointer-events: none !important;
}
`;
const style = document.createElement('style');
style.textContent = css;
(document.head || document.documentElement).appendChild(style);
// === Clean thumbnail previews ===
const cleanThumbnails = () => {
document.querySelectorAll('img[src*="an_webp"], img[src*="video-preview"], video[src*="an_webp"], video[src*="video-preview"]').forEach(el => {
if (el.tagName === 'IMG') {
el.src = el.src.replace(/an_webp\/[^&]*&/g, '').replace(/video-preview\/[^&]*&/g, '');
el.srcset = '';
} else if (el.tagName === 'VIDEO') {
killVideo(el);
}
});
};
// === KILL VIDEO: Stop + mute + remove src + block events ===
const killVideo = (video) => {
if (!video || video._killed) return;
video._killed = true;
// Force mute & pause
video.muted = true;
video.volume = 0;
video.pause();
video.currentTime = 0;
// Remove source
video.src = '';
video.removeAttribute('src');
try { video.load(); } catch(e) {}
// Block all playback
const block = (e) => {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
video.pause();
return false;
};
['play', 'playing', 'loadstart', 'loadeddata', 'canplay', 'canplaythrough', 'volumechange'].forEach(evt => {
video.addEventListener(evt, block, true);
});
// Remove autoplay & loop
video.removeAttribute('autoplay');
video.removeAttribute('loop');
video.preload = 'none';
// Hide
video.style.display = 'none';
};
// === Hide & Kill Trailers ===
let trailerProcessed = false;
const TRAILER_SELECTORS = [
'ytd-channel-video-player-renderer',
'ytd-rich-shelf-renderer[is-prominent-shelf]',
'ytd-rich-shelf-renderer',
'ytd-compact-video-renderer:has(video)',
'.ytd-channel-video-player-renderer',
'.channel-trailer',
'[data-purpose="channel-trailer"]',
'video[src*="youtube"]',
'ytd-video-renderer video',
'ytd-playlist-renderer video'
];
const hideTrailers = () => {
if (trailerProcessed) return;
let found = false;
for (const selector of TRAILER_SELECTORS) {
const elements = document.querySelectorAll(selector);
elements.forEach(el => {
if (!el || el.nodeType !== 1) return;
found = true;
// Hide container
Object.assign(el.style, {
display: 'none !important',
visibility: 'hidden !important',
opacity: '0 !important',
height: '0 !important',
width: '0 !important',
overflow: 'hidden !important',
pointerEvents: 'none !important'
});
// Kill all videos inside
const videos = el.querySelectorAll ? el.querySelectorAll('video') : [];
videos.forEach(killVideo);
if (el.tagName === 'VIDEO') killVideo(el);
// Remove from DOM
if (el.parentNode && !el._removed) {
el._removed = true;
el.parentNode.removeChild(el);
}
});
if (found) break;
}
// Global autoplay + youtube video killer
document.querySelectorAll('video').forEach(v => {
if (v.src.includes('youtube') || v.autoplay || v.src) {
killVideo(v);
}
});
if (found) trailerProcessed = true;
};
// === Unified Observer & Interval ===
let observer = null;
let interval = null;
let cleanupTimer = null;
const startProcessing = () => {
if (observer) return;
cleanThumbnails();
hideTrailers();
observer = new MutationObserver(() => {
cleanThumbnails();
if (!trailerProcessed) hideTrailers();
});
observer.observe(document.documentElement, {
childList: true,
subtree: true,
attributes: true,
attributeFilter: ['src', 'srcset', 'autoplay']
});
interval = setInterval(() => {
cleanThumbnails();
if (!trailerProcessed) hideTrailers();
}, 250);
cleanupTimer = setTimeout(() => {
if (observer) observer.disconnect();
if (interval) clearInterval(interval);
}, 18000);
};
// === Run on load ===
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', () => setTimeout(startProcessing, 50));
} else {
startProcessing();
}
// === SPA Navigation ===
let lastUrl = location.href;
const navObserver = new MutationObserver(() => {
const url = location.href;
if (url !== lastUrl) {
lastUrl = url;
trailerProcessed = false;
setTimeout(() => {
style.textContent = css;
startProcessing();
}, 120);
}
});
navObserver.observe(document, { subtree: true, childList: true });
const originalPushState = history.pushState;
history.pushState = function() {
originalPushState.apply(this, arguments);
setTimeout(() => {
if (location.href !== lastUrl) {
lastUrl = location.href;
trailerProcessed = false;
startProcessing();
}
}, 80);
};
// === Global autoplay blocker ===
setInterval(() => {
document.querySelectorAll('video[autoplay], video:not([muted])').forEach(v => {
v.muted = true;
v.volume = 0;
v.pause();
v.removeAttribute('autoplay');
});
}, 400);
// === Extra: Block audio context resume (YouTube JS tricks) ===
const blockAudio = () => {
if (window.AudioContext || window.webkitAudioContext) {
const orig = (window.AudioContext || window.webkitAudioContext).prototype.resume;
(window.AudioContext || window.webkitAudioContext).prototype.resume = function() {
return Promise.resolve();
};
}
};
setTimeout(blockAudio, 100);
})();