Pause/Mute HTML5 Audio/Video On Leaving Tab

Pause or mute HTML5 audio/video on leaving a tab and restore them back on returning.

目前为 2020-03-27 提交的版本。查看 最新版本

// ==UserScript==
// @name        Pause/Mute HTML5 Audio/Video On Leaving Tab
// @namespace   PauseMuteHTML5AudioVideoAudioOnLeavingTab
// @version     1.0.3
// @license     AGPL v3
// @author      jcunews
// @description Pause or mute HTML5 audio/video on leaving a tab and restore them back on returning.
// @website     https://gf.qytechs.cn/en/users/85671-jcunews
// @include     *://*/*
// @grant       none
// ==/UserScript==

(() => {

  //=== Configuration Start ===

  var muteInsteadOfPause = false; //set to `true` to mute instead of pause

  //=== Configuration End ===
  
  var sHidden, sVisibilityChange, elements;
  
  if ("undefined" !== typeof document.hidden) {
    sHidden = "hidden";
    sVisibilityChange = "visibilitychange";
  } else if ("undefined" !== typeof document.webkitHidden) {
    sHidden = "webkitHidden";
    sVisibilityChange = "webkitvisibilitychange";
  } else if ("undefined" !== typeof document.msHidden) {
    sHidden = "msHidden";
    sVisibilityChange = "msvisibilitychange";
  }
  
  function checkStatus() {
    if (!document[sHidden]) {
      if (elements) {
        elements.forEach(function(v) {
          if (muteInsteadOfPause) {
            v.muted = false;
          } else v.play();
        });
      }
    } else {
      elements = Array.prototype.slice.call(document.querySelectorAll("audio, video")).filter(
        function(v) {
          if (muteInsteadOfPause) {
            if (!v.muted) {
              v.muted = true;
              return true;
            }
          } else if (!v.paused) {
            v.pause();
            return true;
          }
          return false;
        }
      );
    }
  }
  
  function init() {
    document.removeEventListener(sVisibilityChange, checkStatus);
    document.addEventListener(sVisibilityChange, checkStatus);
  }
  
  //Support for Structured Page Fragments. For e.g. YouTube
  addEventListener("spfdone", init);
  
  init();
})();

QingJ © 2025

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