Amazon Prime Video - Auto Skip Advertisement Trailer

Amazon Prime Video - Auto Skip Advertisement Trailer.

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Amazon Prime Video - Auto Skip Advertisement Trailer
// @description  Amazon Prime Video - Auto Skip Advertisement Trailer.
// @version      0.1
// @author       to
// @namespace    https://github.com/to
// @license      MIT
// 
// @noframes
// @include      https://www.amazon.*/gp/video/*
// @include      https://www.amazon.*/Amazon-Video/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=amazon.co.jp
// ==/UserScript==

let currentTitle;
new MutationObserver(debounce(() => {
	// スキップボタンを取得する
	const skip = $x('//div[contains(@class, "atvwebplayersdk-infobar-container")]//div[contains(text(), "スキップ")]');
	if (!skip)
		return;

	const title =
		document.querySelector('.atvwebplayersdk-title-text').textContent +
		document.querySelector('.atvwebplayersdk-subtitle-text').textContent;

	// 現在のタイトルでスキップ処理を まだ行っていないか?
	// (短時間に連続してスキップ部分をクリックし 次のエピソードへ遷移してしまうの防ぐ)
	if (currentTitle != title) {
		skip.click();
		currentTitle = title;

		// エピソード連続視聴時を想定し 現在のタイトルを初期化する
		setTimeout(() => {
			currentTitle = null;
		}, 3000);
	}
})).observe(document.body, {
	childList: true,
	subtree: true,
});

function debounce(fn, interval = 500) {
	var timer;
	return function () {
		clearTimeout(timer);
		timer = setTimeout(() => {
			fn();
		}, interval);
	}
}

function $x(path, target) {
	return document.evaluate(
		path, target || document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}