Greasy Fork

YouTube去广告

简单高效的YouTube去广告脚本,拒绝花里胡哨.这个脚本可以移除所有广告,甚至是视频广告.如果你有一丢丢编程知识,可以尝试为常量cssSeletorArr定义元素.如果你有好的建议可以联系我([email protected]).

目前为 2023-02-10 提交的版本。查看 最新版本

// ==UserScript==
// @name         YouTube去广告
// @name:zh-CN   YouTube去广告
// @name:zh-TW   YouTube去廣告
// @name:ar      YouTube AD Blocker
// @name:bg      YouTube AD Blocker
// @name:cs      YouTube AD Blocker
// @name:da      YouTube AD Blocker
// @name:de      YouTube AD Blocker
// @name:el      YouTube AD Blocker
// @name:eo      YouTube AD Blocker
// @name:es      YouTube AD Blocker
// @name:fi      YouTube AD Blocker
// @name:fr      YouTube AD Blocker
// @name:fr-CA   YouTube AD Blocker
// @name:he      YouTube AD Blocker
// @name:hu      YouTube AD Blocker
// @name:id      YouTube AD Blocker
// @name:ko      YouTube AD Blocker
// @name:nb      YouTube AD Blocker
// @name:nl      YouTube AD Blocker
// @name:pl      YouTube AD Blocker
// @name:pt-BR   YouTube AD Blocker
// @name:ro      YouTube AD Blocker
// @name:ru      YouTube AD Blocker
// @name:sk      YouTube AD Blocker
// @name:sr      YouTube AD Blocker
// @name:sv      YouTube AD Blocker
// @name:th      YouTube AD Blocker
// @name:tr      YouTube AD Blocker
// @name:uk      YouTube AD Blocker
// @name:ug      YouTube AD Blocker
// @name:vi      YouTube AD Blocker
// @name:it      YouTube AD Blocker
// @name:ja      YouTubeの広告を削除します
// @name:kr      포함한 YouTube 광고 차단

// @namespace    http://tampermonkey.net/
// @version      1.34

// @description         简单高效的YouTube去广告脚本,拒绝花里胡哨.这个脚本可以移除所有广告,甚至是视频广告.如果你有一丢丢编程知识,可以尝试为常量cssSeletorArr定义元素.如果你有好的建议可以联系我([email protected]).
// @description:zh-CN   简单高效的YouTube去广告脚本,拒绝花里胡哨.这个脚本可以移除所有广告,甚至是视频广告.如果你有一丢丢编程知识,可以尝试为常量cssSeletorArr定义元素.如果你有好的建议可以联系我([email protected]).
// @description:zh-TW   簡單高效的YouTube去廣告腳本,拒絕花裏胡哨.這個腳本可以移除所有廣告,甚至是視頻廣告.如果你有一丟丟編程知識,可以嘗試為常量cssSeletorArr定義元素.如果你有好的建議可以聯系我([email protected]).
// @description:ar      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:bg      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:cs      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:da      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:de      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:el      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:eo      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:es      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:fi      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:fr      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:fr-CA   Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:he      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:hu      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:id      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:ko      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:nb      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:nl      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:pl      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:pt-BR   Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:ro      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:ru      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:sk      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:sr      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:sv      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:th      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:tr      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:uk      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:ug      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:vi      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:it      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:ja      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).
// @description:kr      Simple and efficient YouTube AD Blocker, no bells and whistles. The script removes all ads, even video ads. If you have a little programming knowledge, you can try editing the constant cssSeletorArr. If you have any good suggestions, you can contact me ([email protected]).

// @author       iamfugui
// @match        *://*.youtube.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=YouTube.com
// @grant        none
// @license MIT
// ==/UserScript==
(function() {
    'use strict';

    //界面广告选择器
    const cssSeletorArr = [
        `#masthead-ad`,//首页顶部横幅广告. Homepage banner AD1.
        `ytd-rich-item-renderer.style-scope.ytd-rich-grid-row:has(.ytd-display-ad-renderer)`,//首页视频排版广告. Homepage video layout AD.
        `ytd-rich-section-renderer #dismissible`,//首页中部横幅广告. Homepage banner AD2.
        `.video-ads.ytp-ad-module`,//播放器底部广告. Player bottom AD.
        `tp-yt-paper-dialog:has(yt-mealbar-promo-renderer)`,//播放页会员促销广告. Play page member promotion AD.
        `#related #player-ads`,//播放页评论区右侧推广广告. Play page, right side, promotion AD.
        `#related ytd-ad-slot-renderer`,//播放页评论区右侧视频排版广告. Play page, right side, video layout AD.
        `ytd-search-pyv-renderer:has(ytd-ad-slot-renderer)`,//搜索页广告.  Search page AD.
    ];

    /**
    * 生成去除广告的css元素style并附加到HTML节点上
    * @param {String} styles 样式文本
    * @param {String} styleId 元素id
    * @return {undefined}
    */
    function generateRemoveADHTMLElement(styles,styleId) {
        //如果已经设置过,退出. If already set.
        if (document.getElementById(styleId)) {
            return false
        }

        //设置移除广告样式. Remove AD CSS.
        let style = document.createElement(`style`);//创建style元素. Create element style.
        style.id = styleId;
        (document.querySelector(`head`) || document.querySelector(`body`)).appendChild(style);//将节点附加到HTML. Append html node.
        style.appendChild(document.createTextNode(styles));//附加样式节点到元素节点. Append element node.
    }

    /**
    * 生成去除广告的css文本
    * @param {Array} cssSeletorArr 待设置css选择器数组
    * @return {String}
    */
    function generateRemoveADCssText(cssSeletorArr){
        cssSeletorArr.forEach((seletor,index)=>{
            cssSeletorArr[index]=`${seletor}{display:none!important}`;//遍历并设置样式. Setting css.
        });
        return cssSeletorArr.join(" ");//拼接成字符串. Return string.
    }

    /**
    * 去除播放中的广告
    * @return {undefined}
    */
    function removePlayerAD(){
        let timerId =setInterval(function(){
            //拥有跳过按钮的广告. Use the Skip button.
            let skipButton = document.querySelector(`.ytp-ad-skip-button`);
            if(skipButton)
            {
                skipButton.click();// 跳过广告. Skip AD.
                return false;//防止后面错判. Return.
            }

            //片头短广告. Short AD.
            let ADShortMsg = document.querySelector(`.video-ads.ytp-ad-module .ytp-ad-player-overlay`);
            if(ADShortMsg){
                location.href = location.href;//重新加载. Reload.
                clearInterval(timerId);
            }

        }, 16);//主流屏幕刷新率为60hz,此设置与16.666666毫秒每帧对应. The mainstream screen refresh rate is 60hz, which corresponds to 16.666666 milliseconds per frame.
    }

    /**
    * main函数
    */
    function main(){
        generateRemoveADHTMLElement(generateRemoveADCssText(cssSeletorArr),`removeAD`);//移除界面中的广告. Remove AD from page.
        removePlayerAD();//移除播放中的广告. Remove AD from player.
    }
    main();

})();