// ==UserScript== // @name youtube去广告 // @namespace http://tampermonkey.net/ // @version 1.2 // @description 简单高效的youtube去广告脚本,拒绝花里胡哨。如果你有一丢丢编程知识,可以尝试为常量cssSeletorArr定义元素。如果你有好的建议可以联系我zgh0118c@gmail.com。 // @author FuckAD // @match https://www.youtube.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com // @grant none // @license MIT // @downloadURL none // ==/UserScript== (function() { 'use strict'; //界面广告选择器 const cssSeletorArr = [ `ytd-rich-item-renderer.style-scope.ytd-rich-grid-row:has(.ytd-display-ad-renderer)`,//首页广告 `.video-ads.ytp-ad-module`,//播放器底部广告 `#related #player-ads`,//播放页评论区右侧推广广告 `#related ytd-ad-slot-renderer`,//播放页评论区右侧视频推荐广告 ]; /** * 生成去除广告的css元素style并附加到HTML节点上 * @param {String} styles 样式文本 * @param {String} styleId 元素id * @return {undefined} */ function generateRemoveAdHTMLElement(styles,styleId) { //如果已经设置过,退出 if (document.getElementById(styleId)) { return false } //设置移除广告样式 let style = document.createElement(`style`);//创建style元素 style.id = styleId; (document.querySelector(`head`) || document.querySelector(`body`)).appendChild(style);//将节点附加到HTML if (style.styleSheet) { style.styleSheet.cssText = styles;//for ie浏览器有更加方便的api } else { style.appendChild(document.createTextNode(styles));//for w3c } } /** * 生成去除广告的css文本 * @param {Array} cssSeletorArr 待设置css选择器数组 * @return {String} */ function generateRemoveAdCssText(cssSeletorArr){ cssSeletorArr.forEach((seletor,index)=>{ cssSeletorArr[index]=`${seletor}{display:none!important}`;//遍历并设置样式 }); return cssSeletorArr.join(" ");//拼接成字符串 } /** * 去除播放中的广告 * @return {undefined} */ function removePlayerAd(){ let timerId =setInterval(function(){ //拥有跳过按钮的广告 let skipButton = document.querySelector(`.ytp-ad-skip-button`); if(skipButton) { skipButton.click();// 跳过广告 return false;//防止后面错判 } //片头短广告 let adShortMsg = document.querySelector(`.video-ads.ytp-ad-module .ytp-ad-player-overlay`); if(adShortMsg){ location.href = location.href;//重新加载 clearInterval(timerId); } }, 16);//主流屏幕刷新率为60hz,此设置与16.666666毫秒每帧对应 } /** * main函数 */ function main(){ generateRemoveAdHTMLElement(generateRemoveAdCssText(cssSeletorArr),`removeAd`);//移除界面中的广告 removePlayerAd();//移除播放中的广告 } main(); })();