Disable YouTube AutoPause

"Video paused. Continue watching?" will not appear anymore.

От 27.12.2022. Виж последната версия.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name                Disable YouTube AutoPause
// @name:en             Disable YouTube AutoPause
// @name:ja             Disable YouTube AutoPause
// @name:zh-TW          Disable YouTube AutoPause
// @name:zh-CN          Disable YouTube AutoPause
// @namespace           http://tampermonkey.net/
// @version             2022.12.28
// @license             MIT License
// @description         "Video paused. Continue watching?" will not appear anymore.
// @description:en      "Video paused. Continue watching?" will not appear anymore.
// @description:ja      「動画が一時停止されました。続きを視聴しますか?」は二度と起こりません。
// @description:zh-TW   「影片已暫停,要繼續撥放嗎?」不再顯示。
// @description:zh-CN   「视频已暂停。是否继续观看?」不再显示。
// @author              CY Fung
// @match               https://www.youtube.com/*
// @exclude             /^https?://\S+\.(txt|png|jpg|jpeg|gif|xml|svg|manifest|log|ini)[^\/]*$/
// @icon                https://raw.githubusercontent.com/cyfung1031/userscript-supports/main/icons/disable-youtube-autopause.svg
// @supportURL          https://github.com/cyfung1031/userscript-supports
// @run-at              document-start
// @grant               none
// @unwrap
// @allFrames
// @inject-into page
// ==/UserScript==

/* jshint esversion:8 */

(function () {
  'use strict';
  const youThereDataHashMap = new WeakMap();
  function fixMessage(message) {
    let youThereData = null;
    try {
      youThereData = message.youThereRenderer.configData.youThereData;
    } catch (e) { }
    if (!youThereData || youThereDataHashMap.has(youThereData)) return;
    let ret = youThereData.playbackPauseDelayMs;
    let tenPU = Math.floor(Number.MAX_SAFE_INTEGER * 0.1);
    if (ret > 0 && ret < 4 * tenPU) {
      youThereDataHashMap.set(youThereData, ret);
      Object.defineProperty(youThereData, 'playbackPauseDelayMs', {
        enumerable: true,
        configurable: true,
        get() {
          Promise.resolve(new Date).then(d => {
            console.log('YouTube is trying to pause video...', d.toLocaleTimeString());
          });
          return 5 * tenPU;
        },
        set(newValue) {
          let oldValue = youThereDataHashMap.get(this);
          Promise.resolve([oldValue, newValue, new Date]).then(args => {
            const [oldValue, newValue, d] = args;
            console.log(`YouTube is trying to change value 'playbackPauseDelayMs' from ${oldValue} to ${newValue} ...`, d.toLocaleTimeString());
          })
          youThereDataHashMap.set(this, newValue);
          return true;
        }
      });
    }
  }

  // e.performDataUpdate -> f.playerData = a.playerResponse;
  // youthereDataChanged_(playerData.messages)
  // youthereDataChanged_ -> b.youThereRenderer && fFb(this.youThereManager_, b.youThereRenderer)
  // a.youThereData_ = b.configData.youThereData;
  // a.youThereData_.playbackPauseDelayMs
  function onYtPageDataUpdated(evt) {
    let messages = null;
    try {
      messages = document.querySelector('#page-manager').data.playerResponse.messages;
    } catch (e) { }
    if (!messages || !messages.length) return;
    for (const message of messages) {
      if (message.youThereRenderer) {
        fixMessage(message);
        break;
      }
    }
  }
  document.addEventListener('yt-page-data-updated', onYtPageDataUpdated, true);

})();