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() {
+
+
+
+
+
+