自动网页全屏
- // ==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;
- }
- })();