From 5322555eba5db64648cebdb3651435def0abe817 Mon Sep 17 00:00:00 2001 From: Gabe Date: Thu, 30 Oct 2025 00:31:17 +0800 Subject: [PATCH] feat: can set whether skip ads. --- src/config/i18n.js | 5 +++++ src/config/setting.js | 1 + src/subtitle/YouTubeCaptionProvider.js | 18 +++++++++++------- src/views/Options/Subtitle.js | 15 +++++++++++++++ 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/config/i18n.js b/src/config/i18n.js index 2ea0b9d..45c761b 100644 --- a/src/config/i18n.js +++ b/src/config/i18n.js @@ -1648,6 +1648,11 @@ export const I18N = { en: `Enable bilingual display`, zh_TW: `雙語顯示`, }, + is_skip_ad: { + zh: `是否快进广告`, + en: `Should I fast forward to the ad?`, + zh_TW: `是否快轉廣告`, + }, background_styles: { zh: `背景样式`, en: `DBackground Style`, diff --git a/src/config/setting.js b/src/config/setting.js index f816833..038a461 100644 --- a/src/config/setting.js +++ b/src/config/setting.js @@ -114,6 +114,7 @@ export const DEFAULT_SUBTITLE_SETTING = { // fromLang: "en", toLang: "zh-CN", isBilingual: true, // 是否双语显示 + skipAd: false, // 是否快进广告 windowStyle: SUBTITLE_WINDOW_STYLE, // 背景样式 originStyle: SUBTITLE_ORIGIN_STYLE, // 原文样式 translationStyle: SUBTITLE_TRANSLATION_STYLE, // 译文样式 diff --git a/src/subtitle/YouTubeCaptionProvider.js b/src/subtitle/YouTubeCaptionProvider.js index fdd6e6c..63e1ec1 100644 --- a/src/subtitle/YouTubeCaptionProvider.js +++ b/src/subtitle/YouTubeCaptionProvider.js @@ -70,6 +70,8 @@ class YouTubeCaptionProvider { } #moAds(adContainer) { + const { skipAd = false } = this.#setting; + const adLayoutSelector = ".ytp-ad-player-overlay-layout"; const skipBtnSelector = ".ytp-skip-ad-button, .ytp-ad-skip-button, .ytp-ad-skip-button-modern"; @@ -83,22 +85,24 @@ class YouTubeCaptionProvider { if (node.matches(adLayoutSelector)) { logger.debug("Youtube Provider: AD start playing!", node); // todo: 顺带把广告快速跳过 - if (videoEl) { + if (videoEl && skipAd) { videoEl.playbackRate = 16; videoEl.currentTime = videoEl.duration; } if (this.#managerInstance) { this.#managerInstance.setIsAdPlaying(true); } - } else if (node.matches(skipBtnSelector)) { + } else if (node.matches(skipBtnSelector) && skipAd) { logger.debug("Youtube Provider: AD skip button!", node); node.click(); } - const skipBtn = node?.querySelector(skipBtnSelector); - if (skipBtn) { - logger.debug("Youtube Provider: AD skip button!!", skipBtn); - skipBtn.click(); + if (skipAd) { + const skipBtn = node?.querySelector(skipBtnSelector); + if (skipBtn) { + logger.debug("Youtube Provider: AD skip button!!", skipBtn); + skipBtn.click(); + } } }); mutation.removedNodes.forEach((node) => { @@ -106,7 +110,7 @@ class YouTubeCaptionProvider { if (node.matches(adLayoutSelector)) { logger.debug("Youtube Provider: Ad ends!"); - if (videoEl) { + if (videoEl && skipAd) { videoEl.playbackRate = 1; } if (this.#managerInstance) { diff --git a/src/views/Options/Subtitle.js b/src/views/Options/Subtitle.js index a7b5847..bcf00b6 100644 --- a/src/views/Options/Subtitle.js +++ b/src/views/Options/Subtitle.js @@ -32,6 +32,7 @@ export default function SubtitleSetting() { chunkLength, toLang, isBilingual, + skipAd = false, windowStyle, originStyle, translationStyle, @@ -145,6 +146,20 @@ export default function SubtitleSetting() { {i18n("disable")} + + + {i18n("enable")} + {i18n("disable")} + +