bilibili 自动网页全屏

自动网页全屏

目前为 2025-03-06 提交的版本。查看 最新版本

// ==UserScript==
// @name        bilibili 自动网页全屏
// @author      Linda6
// @license     MIT
// @namespace   Polar
// @description 自动网页全屏
// @version     1.0.0
// @include     *://www.bilibili.com/video/*
// @include     *://www.bilibili.com/bangumi/play/*
// @run-at      document-start
// ==/UserScript==

(function () {
    // 可能的全屏按钮类名或 ID
    const FULLSCREEN_BUTTON_NAMES = [
        "bpx-player-ctrl-web-enter",
        "bilibili-player-iconfont-web-fullscreen-off",
        "player_pagefullscreen_player",
        "squirtle-pagefullscreen-inactive"
    ];
    // 不同浏览器的全屏状态变化事件
    const FULLSCREEN_EVENTS = [
        'fullscreenchange',
        'webkitfullscreenchange',
        'mozfullscreenchange',
        'MSFullscreenChange'
    ];
    // 查找元素的最大尝试次数
    const MAX_ATTEMPTS = 20;
    // 查找元素的检查间隔时间(毫秒)
    const CHECK_INTERVAL = 1000;
    // 用于保存找到的全屏按钮
    let foundFullscreenButton = null;

    // 页面加载完成后执行的操作
    window.addEventListener('load', function () {
        attemptFullscreen();
        setupFullscreenListeners();
    });

    // 尝试进入全屏模式
    function attemptFullscreen() {
        // 如果已经保存了全屏按钮,直接点击
        if (foundFullscreenButton) {
            try {
                foundFullscreenButton.click();
            } catch (error) {}
            return;
        }
        // 遍历可能的全屏按钮名称,查找并点击按钮
        for (let i = 0; i < FULLSCREEN_BUTTON_NAMES.length; i++) {
            const elementName = FULLSCREEN_BUTTON_NAMES[i];
            const element = waitElement(elementName);
            if (element) {
                foundFullscreenButton = element;
                break;
            }
        }
    }

    // 设置全屏状态变化的监听器
    function setupFullscreenListeners() {
        FULLSCREEN_EVENTS.forEach((eventName) => {
            document.addEventListener(eventName, function () {
                if (!isFullscreen()) {
                    attemptFullscreen();
                }
            });
        });
    }

    // 检查页面是否处于全屏状态
    function isFullscreen() {
        return document.fullscreenElement || document.webkitIsFullScreen || document.mozFullScreen || document.msFullscreenElement;
    }

    // 查找并点击指定名称的元素
    function waitElement(elementName) {
        let attempts = MAX_ATTEMPTS;
        let intervalId;
        const findAndClick = () => {
            if (attempts <= 0) {
                clearInterval(intervalId);
                return null;
            }
            attempts--;
            let element = document.getElementsByClassName(elementName)[0];
            if (!element) {
                element = document.getElementById(elementName);
            }
            if (element) {
                try {
                    element.click();
                } catch (error) {}
                clearInterval(intervalId);
                return element;
            }
        };
        const initialElement = document.getElementsByClassName(elementName)[0] || document.getElementById(elementName);
        if (initialElement) {
            return findAndClick();
        } else {
            intervalId = setInterval(findAndClick, CHECK_INTERVAL);
        }
        return null;
    }
})();

QingJ © 2025

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