Pause videos playing in background tabs when a video starts playing in the foreground tab
当前为
// ==UserScript==
// @name Autopause
// @namespace http://tampermonkey.net/
// @version 0.5
// @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';
start();
function start() {
const channel = new BroadcastChannel('AutoPauseInBackgroundTabWhenVideoPlayed');
channel.addEventListener('message', () => pauseAllVideos());
const onPlay = (event) => {
const isHasAudio = hasAudio(event.target);
if (isHasAudio) {
channel.postMessage(null);
}
};
const rebuild = () => getAllVideos().forEach(video => {
video.removeEventListener('play', onPlay);
video.addEventListener('play', onPlay);
});
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);
}
}
})();