Pause videos playing in background tabs when a video starts playing in the foreground tab
当前为
// ==UserScript==
// @name Autopause all
// @namespace http://tampermonkey.net/
// @version 0.2
// @description Pause videos playing in background tabs when a video starts playing in the foreground tab
// @author Kirill Skliarov
// @match *://*/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
const channel = new BroadcastChannel('AutoPauseInBackgroundTabWhenVideoPlayed');
channel.addEventListener('message', () => pauseAllVideos());
const postMsg = () => channel.postMessage(null);
const rebuild = () => {
getAllVideos().forEach(video => {
video.removeEventListener('play', postMsg);
const isHasAudio = hasAudio(video);
if (isHasAudio) {
video.addEventListener('play', postMsg);
}
});
};
const observer = new MutationObserver(rebuild);
const config = { attributes: false, childList: true, subtree: true };
observer.observe(document.body, config);
function getAllVideos() {
return document.querySelectorAll('video');
}
function pauseAllVideos() {
getAllVideos().forEach(video => video.pause());
}
function hasAudio(video) {
return video.mozHasAudio ||
!!video.webkitAudioDecodedByteCount ||
(!!video.audioTracks && !!video.audioTracks.length);
}
})();