YouTube | Stop Autoplay (2018 Edition)

Disables automatic playback ("Autoplay") of YouTube videos. Works after initial page load and in-page navigation. Compatible with classic & modern YouTube user interface.

目前為 2018-08-20 提交的版本,檢視 最新版本

// ==UserScript==
// @name            YouTube | Stop Autoplay (2018 Edition)
// @namespace       de.sidneys.userscripts
// @homepage        https://gist.githubusercontent.com/sidneys/0a5bea36f989d445cdfbd776023a94ca/raw/
// @version         2.2.0
// @description     Disables automatic playback ("Autoplay") of YouTube videos. Works after initial page load and in-page navigation. Compatible with classic & modern YouTube user interface.
// @author          sidneys
// @icon            https://www.youtube.com/favicon.ico
// @include         http*://www.youtube.com/*
// @require         https://gf.qytechs.cn/scripts/38888-greasemonkey-color-log/code/Greasemonkey%20%7C%20Color%20Log.js
// @run-at          document-start
// ==/UserScript==

/**
 * ESLint configuration
 * @external
 */
/* global DEBUG */

/**
 * @default
 * @constant
 */
DEBUG = false


/**
 * @default
 * @constant
 */
const urlPath = '/watch'


/**
 * Stop YouTube Video Player
 */
let stopPlayback = () => {
    //console.info('stopPlayback')

    ['play', 'playing', 'timeupdate'].forEach((eventName) => {
        const videoElement = document.querySelector('video')

        /** @listens video:Event */
        videoElement.addEventListener(eventName, () => {
            console.debug('videoElement', eventName)

            const playerElement = document.querySelector('.html5-video-player')

            // Pause Video
            playerElement.pauseVideo()

            // Show Status
            console.info('Playback paused.', 'Media Event:', eventName, 'Player State:', playerElement.getPlayerState())
        }, { once: true })
    })
}


/**
 * Init
 */
let init = () => {
    console.info('init')

    // Check URL
    if (!window.location.pathname.startsWith(urlPath)) { return }

    stopPlayback()
}


/**
 * Immediately Invoked Function Expression
 */
(() => {
    /**
     * This event hook covers initial page loading and reloading.
     * @listens document:Event#readystatechange
     */
    document.addEventListener('readystatechange', (event) => {
        console.info('document#readystatechange', document.readyState)

        if (document.readyState === 'interactive') {
            init()
        }
    })

    /**
     * This event hook covers follow-up in-page navigation (classic YouTube user interface).
     * @listens window:Event#spfdon
     */
    window.addEventListener('spfdone', () => {
        console.info('window#spfdone')

        init()
    })

    /**
     * This event hook covers in-page navigation within the (modern YouTube user interface).
     * @listens window:Event#spfdon
     */
    window.addEventListener('yt-navigate-finish', () => {
        console.info('yt-navigate-finish')

        init()
    })
})()

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址