B站 & YouTube 仅激活标签播放并保持全屏

只允许当前标签页播放视频,其他全部暂停,并保持全屏状态

// ==UserScript==
// @name         B站 & YouTube 仅激活标签播放并保持全屏
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  只允许当前标签页播放视频,其他全部暂停,并保持全屏状态
// @match        https://www.bilibili.com/video/*
// @match        https://www.youtube.com/watch*
// @grant        window.close
// ==/UserScript==

(function() {
    'use strict';

    let wasFullscreen = false;

    // 检查当前标签是否全屏
    function checkFullscreen() {
        const video = document.querySelector('video');
        if (video && document.fullscreenElement) {
            wasFullscreen = true;
        } else {
            wasFullscreen = false;
        }
    }

    function setPlaybackState() {
        const video = document.querySelector('video');
        if (!video) return;

        if (document.visibilityState === 'visible') {
            if (video.paused) {
                console.log('标签页激活,恢复播放');
                video.play().catch(() => {});
                if (wasFullscreen) {
                    console.log('上一个视频全屏,设置为全屏');
                    video.requestFullscreen().catch(() => {});
                }
            }
        } else {
            if (!video.paused) {
                console.log('标签页非激活,暂停播放');
                video.pause();
            }
        }
    }

    function onVideoEnded() {
        console.log('视频播放完毕,关闭标签页');
        window.close();
        window.open('', '_self').close();
    }

    function setup() {
        const video = document.querySelector('video');
        if (video) {
            console.log('检测到视频元素');
            video.addEventListener('ended', onVideoEnded);
            document.addEventListener('visibilitychange', setPlaybackState);
            checkFullscreen();  // 检查是否全屏
            setPlaybackState(); // 初始化判断一次
        } else {
            setTimeout(setup, 1000);
        }
    }

    setup();
})();