Greasy Fork

Greasy Fork is available in English.

YouTube - 阻止自动播放预览和频道预告片

在所有YouTube页面上阻止缩略图悬停预览(WebP和视频)并停止频道预告片(视频+音频)。保留进度条和播放按钮。无需登录或权限,页面加载时运行。

当前为 2025-11-14 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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    http://greasyfork.icu/users/979364-miebie-1412
// @author       miebie.1412
// @version      1.2.8
// @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  http://greasyfork.icu/en/users/979364-miebie-1412
// @supportURL   http://greasyfork.icu/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';
    const style = document.createElement('style');
    style.textContent = `
        ytd-moving-thumbnail-renderer,
        .ytd-moving-thumbnail-renderer,
        ytd-thumbnail-overlay-resume-playback-renderer,
        .ytd-thumbnail-overlay-resume-playback-renderer,
        .ytp-cued-thumbnail-overlay,
        .ytp-cued-thumbnail-overlay-image,
        ytd-thumbnail-overlay-loading-preview-renderer,
        .ytd-thumbnail-overlay-loading-preview-renderer,
        ytd-video-preview,
        .ytd-video-preview,
        #thumbnail-overlay-play,
        .thumbnail-overlay-play,
        #video-preview-container,
        .video-preview-container,
        ytd-channel-video-player-renderer,
        #c4-player,
        ytd-player[context*="CHANNEL_TRAILER"] {
            display: none !important;
            visibility: hidden !important;
            height: 0 !important;
            width: 0 !important;
            overflow: hidden !important;
            pointer-events: none !important;
        }
        ytd-thumbnail img,
        .ytd-thumbnail img {
            transition: none !important;
            opacity: 1 !important;
        }
        #overlays,
        .ytd-rich-item-renderer #overlays,
        ytd-thumbnail[has-inline-playback-button] #overlays,
        ytd-thumbnail-overlay-toggle-pause-renderer,
        .ytd-thumbnail-overlay-toggle-pause-renderer {
            all: unset !important;
            display: block !important;
        }
    `;
    (document.head || document.documentElement).appendChild(style);
    const blockAudio = () => {
        ['AudioContext', 'webkitAudioContext'].forEach(name => {
            if (window[name] && !window[name].prototype._blocked) {
                const AC = window[name];
                AC.prototype._blocked = true;
                const dummy = { connect: () => {}, disconnect: () => {} };
                AC.prototype.createMediaElementSource = () => dummy;
                AC.prototype.resume = () => Promise.resolve();
            }
        });
    };
    blockAudio();
    setInterval(blockAudio, 200);
    const isMainVideo = (video) => {
        return location.pathname.startsWith('/watch') &&
               (video.closest('ytd-watch-flexy') || video.closest('#ytd-player') || video.classList.contains('html5-main-video'));
    };
    const isTrailer = (el) => {
        return el.closest('ytd-channel-video-player-renderer') ||
               el.id === 'c4-player' ||
               (el.tagName === 'YTD-PLAYER' && el.getAttribute('context') && el.getAttribute('context').includes('CHANNEL_TRAILER'));
    };
    const killVideo = (video) => {
        if (!video || video._killed || isMainVideo(video)) return;
        if (video.src && video.src.startsWith('blob:')) URL.revokeObjectURL(video.src);
        video.pause();
        video.muted = true;
        video.volume = 0;
        video.currentTime = 0;
        video.src = '';
        video.removeAttribute('src');
        try { video.load(); } catch(e) {}
        video._killed = true;
    };
    const blockAll = () => {
        document.querySelectorAll('img[src*="an_webp"], video[src*="an_webp"], img[src*="video-preview"], 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') {
                el.src = el.src.replace(/an_webp\/[^&]*&/g, '').replace(/video-preview\/[^&]*&/g, '');
                el.pause();
                el.currentTime = 0;
                el.removeAttribute('autoplay');
            }
        });
        if (!location.pathname.startsWith('/watch')) {
            document.querySelectorAll('video').forEach(v => {
                if (isTrailer(v)) killVideo(v);
            });
            document.querySelectorAll('ytd-channel-video-player-renderer, #c4-player, ytd-player').forEach(el => {
                if (isTrailer(el)) {
                    const vid = el.querySelector('video');
                    if (vid) killVideo(vid);
                }
            });
        }
    };
    const observer = new MutationObserver(blockAll);
    observer.observe(document.documentElement, {
        childList: true,
        subtree: true,
        attributes: true,
        attributeFilter: ['src', 'srcset', 'class', 'id', 'context']
    });
    blockAll();
    setInterval(blockAll, 500);
    let lastUrl = location.href;
    const navObs = new MutationObserver(() => {
        if (location.href !== lastUrl) {
            lastUrl = location.href;
            setTimeout(blockAll, 100);
        }
    });
    navObs.observe(document, { subtree: true, childList: true });
    ['pushState', 'replaceState'].forEach(m => {
        const orig = history[m];
        history[m] = function() {
            orig.apply(this, arguments);
            setTimeout(() => { if (location.href !== lastUrl) blockAll(); }, 80);
        };
    });
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', blockAll);
    }
})();