自动网页全屏
// ==UserScript== // @name bilibili 自动网页全屏 // @author Linda6 // @license Apache-2.0 // @namespace Polar // @description 自动网页全屏 // @version 1.0.4 // @include *://www.bilibili.com/video/* // @include *://www.bilibili.com/bangumi/play/* // @run-at document-start // @icon https://www.bilibili.com/favicon.ico // ==/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; } })();