YouTube 播放到結尾自動停止

防止 YouTube 播放列表自動切換下一個

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         YouTube 播放到結尾自動停止
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  防止 YouTube 播放列表自動切換下一個
// @author       shanlan(grok-4-fast-reasoning)
// @match        https://www.youtube.com/*
// @grant        none
// @run-at       document-end
// @license      MIT
// ==/UserScript==

(async () => {
  const waitForDom = () => document.readyState === 'loading' 
    ? new Promise(r => document.addEventListener('DOMContentLoaded', r)) 
    : Promise.resolve();

  await waitForDom();
  await customElements.whenDefined('yt-playlist-manager');

  const stopAutoAdvance = () => {
    const manager = document.querySelector('yt-playlist-manager');
    if (manager) {
      const instance = manager.polymerController || manager.inst || manager;
      if (instance.canAutoAdvance_ !== undefined) {
        instance.canAutoAdvance_ = false;
      }
    }
  };

  const init = () => {
    stopAutoAdvance();
    const interval = setInterval(() => {
      if (document.querySelector('yt-playlist-manager')) {
        stopAutoAdvance();
        clearInterval(interval);
      }
    }, 100);
  };

  document.addEventListener('yt-navigate-finish', () => setTimeout(init, 100));
  init();
})();