您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Disable YouTube video based ads at home page, and right before or in the middle of the main video playback. For new YouTube layout (Polymer) only.
当前为
// ==UserScript== // @name Disable YouTube Video Ads // @namespace DisableYouTubeVideoAds // @version 1.2.9 // @license AGPLv3 // @author jcunews // @website https://greasyfork.org/en/users/85671-jcunews // @description Disable YouTube video based ads at home page, and right before or in the middle of the main video playback. For new YouTube layout (Polymer) only. // @include https://www.youtube.com/* // @grant unsafeWindow // @run-at document-start // ==/UserScript== ((window, fn) => { fn = (a, et) => { if ((a = document.scripts[document.scripts.length - 1]) && (a.id === "dyvaUjs")) a.remove(); et = window.InstallTrigger ? "beforescriptexecute" : "message"; //Firefox workaround window.XMLHttpRequest.prototype.open_dyva = window.XMLHttpRequest.prototype.open; window.XMLHttpRequest.prototype.open = function(mtd, url) { if (!(/get_midroll_info|get_video_info/).test(url)) { return this.open_dyva.apply(this, arguments); } }; window.Node.prototype.appendChild_dyva = window.Node.prototype.appendChild; window.Node.prototype.appendChild = function(node) { var a; if ((node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) && Array.from(node.childNodes).some((n, i) => { if (n.id === "masthead-ad") { n.remove(); return true; } })) window.Node.prototype.appendChild = window.Node.prototype.appendChild_dyva; return this.appendChild_dyva.apply(this, arguments); }; function patchPlayerResponse(playerResponse) { delete playerResponse.adPlacements; delete playerResponse.playerAds; } function patchPlayerArgs(args, a) { if (args.ad_device) { args.ad_device = "0"; } if (args.ad_flags) { args.ad_flags = 0; } if (args.ad_logging_flag) { args.ad_logging_flag = "0"; } if (args.ad_preroll) { args.ad_preroll = "0"; } if (args.ad_slots) { delete args.ad_slots; } if (args.ad_tag) { delete args.ad_tag; } if (args.ad3_module) { args.ad3_module = "0"; } if (args.adsense_video_doc_id) { delete args.adsense_video_doc_id; } if (args.afv) { args.afv = false; } if (args.afv_ad_tag) { delete args.afv_ad_tag; } if (args.allow_html5_ads) { args.allow_html5_ads = 0; } if (args.csi_page_type) { args.csi_page_type = args.csi_page_type.replace(/watch7ad/, "watch7"); } if (args.enable_csi) { args.enable_csi = "0"; } if (args.pyv_ad_channel) { delete args.pyv_ad_channel; } if (args.show_pyv_in_related) { args.show_pyv_in_related = false; } if (args.vmap) { delete args.vmap; } if (args.player_response) { a = JSON.parse(args.player_response); patchPlayerResponse(a); args.player_response = JSON.stringify(a); } } function patchSpf() { if (!spf.request_dyva) { spf.request_dyva = spf.request; spf.request = function(a, b) { if (b && b.onDone) { var onDone_ = b.onDone; b.onDone = function(response) { var a = response; if (a && (/\/watch\?/).test(a.url) && (a = a.response) && (a = a.parts)) { a.forEach((p, a) => { if ((p = p.player) && (p = p.args) && p.player_response) { a = JSON.parse(p.player_response); patchPlayerResponse(a); p.player_response = JSON.stringify(a); } else if (p = p.playerResponse) { patchPlayerResponse(p); } }); } return onDone_.apply(this, arguments); }; return this.request_dyva.apply(this, arguments); } }; return; } } function do2() { if (window.ytplayer && window.ytplayer.config && window.ytplayer.config.args && !window.ytplayer.config.args.dvya) { window.ytplayer.config.args.dvya = 1; patchPlayerArgs(window.ytplayer.config.args); removeEventListener(et, do2); } else if (et === "message") postMessage({}); } function do1() { if (window.yt && window.yt.player && window.yt.player.Application && window.yt.player.Application.create && !window.yt.player.Application.dyva) { window.yt.player.Application.dyva = 1; var ytPlayerApplicationCreate = window.yt.player.Application.create; window.yt.player.Application.create = function(id, ytPlayerConfig) { if ((id === "player-api") && ytPlayerConfig && ytPlayerConfig.args && ytPlayerConfig.args.vmap) { delete ytPlayerConfig.args.vmap; } return ytPlayerApplicationCreate.apply(this, arguments); }; var ytPlayerApplicationCreateAlternate = window.yt.player.Application.createAlternate; window.yt.player.Application.createAlternate = function(id, ytPlayerConfig) { if ((id === "player-api") && ytPlayerConfig && ytPlayerConfig.args && ytPlayerConfig.args.vmap) { delete ytPlayerConfig.args.vmap; } return ytPlayerApplicationCreateAlternate.apply(this, arguments); }; var ytSetConfig = window.yt.setConfig; window.yt.setConfig = function(ytConfig){ if (ytConfig) { if (ytConfig.ADS_DATA) { delete ytConfig.ADS_DATA; } } return ytSetConfig.apply(this, arguments); }; var ytcfgSet = window.ytcfg.set; window.ytcfg.set = function(ytConfig){ if (window.ytInitialPlayerResponse) patchPlayerResponse(window.ytInitialPlayerResponse); patchSpf(); if (ytConfig) { if (ytConfig.SKIP_RELATED_ADS === false) { ytConfig.SKIP_RELATED_ADS = true; } if (ytConfig.TIMING_ACTION) { ytConfig.TIMING_ACTION = ytConfig.TIMING_ACTION.replace(/watch7ad/, "watch7"); } if (ytConfig.TIMING_INFO) { if (ytConfig.TIMING_INFO.yt_ad) { ytConfig.TIMING_INFO.yt_ad = 0; } if (ytConfig.TIMING_INFO.yt_ad_an) { delete ytConfig.TIMING_INFO.yt_ad_an; } if (ytConfig.TIMING_INFO.yt_ad_pr) { ytConfig.TIMING_INFO.yt_ad_pr = 0; } } } return ytcfgSet.apply(this, arguments); }; removeEventListener(et, do1); addEventListener(et, do2); do2(); } else if (et === "message") postMessage({}); } addEventListener(et, do1); if (et === "message") postMessage({}); addEventListener("spfpartprocess", function(ev) { //old youtube if (ev.detail && ev.detail.part && ev.detail.part.data && ev.detail.part.data.swfcfg && ev.detail.part.data.swfcfg.args) { patchPlayerArgs(ev.detail.part.data.swfcfg.args); } }, true); }; if (this.GM_info && (this.GM_info.scriptHandler === "FireMonkey")) { //workaround for FireMonkey's partial compatibility to GreaseMonkey specification. let e = document.createElement("SCRIPT"); e.id = "dyvaUjs"; e.text = "(" + fn + ")()"; document.documentElement.appendChild(e); } else fn(); })(unsafeWindow);