您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
隐藏youtube显示的google广告,自动点击"skip ad"
- // ==UserScript==
- // @name Hide youtube google ad
- // @name:zh-CN 隐藏youtube google广告
- // @namespace vince.youtube
- // @version 2.5.0
- // @description hide youtube google ad,auto click "skip ad"
- // @description:zh-CN 隐藏youtube显示的google广告,自动点击"skip ad"
- // @author vince ding
- // @match https://*.youtube.com/*
- // @grant GM_xmlhttpRequest
- // @grant GM_info
- // @grant GM_getValue
- // @grant unsafeWindow
- // @run-at document-start
- // @connect googlevideo.com
- // ==/UserScript==
- (function() {
- 'use strict';
- var closeAd=function (){
- //var css = '.video-ads,.video-ads .ad-container .adDisplay,#player-ads,.ytp-ad-module,.ytp-ad-image-overlay,#panels"{ display: none!important; }',
- var css = `
- .video-ads,
- .ytp-ad-overlay-container,
- .ytp-ad-overlay-image,
- .ytp-ad-skip-button-container,
- .ytp-ad-preview-container,
- .ytp-ad-message-container,
- #masthead-ad,
- #player-ads,
- ytd-display-ad-renderer,
- ytd-companion-slot-renderer,
- .ytd-video-masthead-ad-v3-renderer,
- .style-scope.ytd-in-feed-ad-layout-renderer,
- .ytd-banner-promo-renderer,
- #related ytd-promoted-sparkles-web-renderer,
- .ytd-promoted-sparkles-text-search-renderer,
- .ytd-display-ad-renderer,
- .ytd-statement-banner-renderer,
- #related ytd-compact-promoted-video-renderer {
- display: none!important;
- }`;
- var head = document.head || document.getElementsByTagName('head')[0];
- var style = document.createElement('style');
- style.type = 'text/css';
- if (style.styleSheet){
- style.styleSheet.cssText = css;
- } else {
- style.appendChild(document.createTextNode(css));
- }
- head.appendChild(style);
- };
- var skipInt;
- var log=function(msg){
- unsafeWindow.console.log (msg);
- };
- var skipAd = function(){
- const skipSelectors = [
- 'button.ytp-ad-skip-button',
- 'button.ytp-ad-skip-button-modern',
- '.ytp-ad-skip-button-container button',
- '.ytp-ad-skip-button-slot button',
- 'button[class*="skip"]',
- 'button[class*="Skip"]',
- '.videoAdUiSkipButton',
- '[data-skip-button]'
- ];
- const skipbtn = skipSelectors.reduce((found, selector) => {
- const element = document.querySelector(selector);
- if (element) {
- const style = window.getComputedStyle(element);
- if (style.display !== 'none' && style.visibility !== 'hidden') {
- return element;
- }
- }
- return found;
- }, null);
- const video = document.querySelector('video');
- const isInAd = Array.from(document.querySelectorAll('.video-ads, .ytp-ad-player-overlay, [class*="ad-showing"], .html5-video-player.ad-showing'))
- .some(element => {
- const style = window.getComputedStyle(element);
- return style.display !== 'none' && style.visibility !== 'hidden';
- });
- if(video) {
- if(isInAd) {
- // 广告状态处理
- video.playbackRate = 16;
- video.muted = true; // 广告时静音
- if(video.paused) {
- video.play();
- }
- } else {
- // 非广告状态处理
- if(video.playbackRate !== 1) {
- video.playbackRate = 1;
- }
- if(video.muted) {// 非广告时恢复声音
- video.muted = false;
- }
- // 检测黑屏状态
- if(!video.paused && video.readyState === 4 && video.currentTime === 0) {
- video.play();
- }
- }
- }
- if(skipbtn && isInAd){
- try {
- skipbtn.removeAttribute('disabled');
- const simulateClick = new MouseEvent('click', {
- bubbles: true,
- cancelable: true,
- buttons: 1
- });
- skipbtn.dispatchEvent(simulateClick);
- } catch(e) {
- log("Skip error: " + e);
- }
- }
- // 更频繁地检查以防止黑屏
- setTimeout(() => {
- window.requestAnimationFrame(skipAd);
- }, 200);
- };
- closeAd();
- skipAd();
- })();