Greasy Fork is available in English.
您可以随时按下 Youtube 广告跳过按钮。
// ==UserScript==
// @name YouTube Ad any time Skipper
// @namespace http://tampermonkey.net/
// @version 1.1
// @description いつでもyoutubeの広告スキップボタンを押すことができます。
// @description:zh-cn 您可以随时按下 Youtube 广告跳过按钮。
// @description:en You can any time press the ad skip button on youtube.
// @author You
// @match https://www.youtube.com/*
// @grant none
// @name:zh-CN YouTube Ad any time Skipper
// @name:en YouTube Ad any time Skipper
// @run-at document-end
// @license MIT
// ==/UserScript==
(function() {
'use strict';
var skipbutton = document.querySelector("#movie_player > div.html5-video-container > video");
var duration =null;
function timeToSeconds(time) {
var parts = time.split(':').map(Number);
var seconds = 0;
if (parts.length === 3) {
seconds += parts[0] * 3600; // hours to seconds
seconds += parts[1] * 60; // minutes to seconds
seconds += parts[2]; // seconds
} else if (parts.length === 2) {
seconds += parts[0] * 60; // minutes to seconds
seconds += parts[1]; // seconds
}
return seconds;
}
function handleImgClick() {
duration = document.querySelector("#movie_player > div.ytp-chrome-bottom > div.ytp-chrome-controls > div.ytp-left-controls > div.ytp-time-display.notranslate > span:nth-child(2) > span.ytp-time-duration").textContent;
skipbutton.currentTime = timeToSeconds(duration);
[...document.querySelector("#movie_player > div.video-ads.ytp-ad-module").getElementsByClassName('ytp-ad-skip-button-slot')].forEach(e => e.querySelector('button')?.click());
}
var classNames = ['ytp-ad-skip-ad-slot', 'ytp-ad-preview-slot','ytp-ad-preview-container'];
// setIntervalを作成します。
var intervalId = setInterval(function() {
for (var i = 0; i < classNames.length; i++) {
var skipAdSlot = document.querySelector("#movie_player > div.video-ads.ytp-ad-module").getElementsByClassName(classNames[i])[0];
if (skipAdSlot) {
var spanElement = skipAdSlot.getElementsByTagName('span')[0];
spanElement.addEventListener('click', handleImgClick);
}
}
}, 1000); // 1秒ごとにチェックします。
// 必要に応じて、setIntervalを停止するためにclearInterval(intervalId)を呼び出すことができます。
})();