Greasy Fork

Greasy Fork is available in English.

红狐弹幕解析+自动播放

红狐弹幕解析和自动播放整合版

当前为 2025-02-22 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         红狐弹幕解析+自动播放
// @namespace    http://tampermonkey.net/
// @version      0.4.3
// @description  红狐弹幕解析和自动播放整合版
// @author       Aomine
// @match        *.rdfplayer.mrgaocloud.com/*
// @match        *:rdfplayer.mrgaocloud.com/player/*
// @match        *v.qq.com/x*
// @match        *v.qq.com/p*
// @match        *v.qq.com/cover*
// @match        *v.qq.com/tv/*
// @match        *.youku.com/v*
// @match        *m.youku.com/*
// @match        *.iqiyi.com/v_*
// @match        *.iqiyi.com/w_*
// @match        *.iqiyi.com/a_*
// @match        *.iq.com/play/*
// @match        *.bilibili.com/video/*
// @match        *.bilibili.com/anime/*
// @match        *.bilibili.com/bangumi/play/*
// @match        *.bilibili.com/s/*
// @match        *.pptv.com/show/*
// @match        *.acfun.cn/*
// @license      GPL License
// @icon         data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PgoNPCEtLSBVcGxvYWRlZCB0bzogU1ZHIFJlcG8sIHd3dy5zdmdyZXBvLmNvbSwgR2VuZXJhdG9yOiBTVkcgUmVwbyBNaXhlciBUb29scyAtLT4KPHN2ZyB3aWR0aD0iODAwcHgiIGhlaWdodD0iODAwcHgiIHZpZXdCb3g9IjAgMCA5MSA5MSIgaWQ9IkxheWVyXzEiIHZlcnNpb249IjEuMSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+Cg08c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDojNEU3QTlFO30NCgkuc3Qxe2ZpbGw6I0YwQURBQjt9DQo8L3N0eWxlPgoNPGc+Cg08Zz4KDTxnPgoNPHBhdGggY2xhc3M9InN0MCIgZD0iTTU1LjQsNTMuNmMyLjEtMi4xLDMuMi00LjgsMS43LThjLTIuMy00LjctMTAuMy01LjUtMTMuMy0xLjNjLTAuNiwwLjgsMC4xLDEuOCwwLjgsMi4xICAgICBjMi4zLDAuOCw1LjMtMSw3LjQsMC40YzMuNiwyLjMtMC44LDUuMi0zLjIsNS45Yy0yLjcsMC44LTEuNiw0LjksMS4yLDQuMmMzLjctMC45LDYuMSwyLjgsNC40LDZjLTEuNywzLTUuMywzLjItOCwxLjcgICAgIGMtMy43LTItOC4xLDMuMS00LjYsNmMyLjgsMi40LDcuNiwxLjcsMTAuOCwwLjNjMy4xLTEuNCw1LjctNCw2LjYtNy40QzYwLjEsNTkuNiw1OC40LDU1LjYsNTUuNCw1My42eiIvPgoNPHBhdGggY2xhc3M9InN0MCIgZD0iTTMzLjIsMjAuOWMtMi44LDEuNS01LjEsMy45LTcuMSw2LjRjLTIuNC0zLjEtNS42LTYuMi05LjMtNi4zYy0xLjcsMC0yLjUsMi4xLTEuMywzLjJjMi45LDMsNiw1LjMsOC4zLDguOSAgICAgYzEuMSwxLjgsMy40LDEuNiw0LjYsMGMyLjMtMy4xLDUuMy01LjMsOC4zLTcuOEMzOS4xLDIzLjIsMzUuOSwxOS40LDMzLjIsMjAuOXoiLz4KDTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik03MS45LDIxLjdjLTIuOCwxLjUtNS4xLDMuOS03LjEsNi40Yy0yLjQtMy4xLTUuNi02LjItOS4zLTYuM2MtMS43LDAtMi41LDIuMS0xLjMsMy4yYzIuOSwzLDYsNS4zLDguMyw4LjkgICAgIGMxLjEsMS44LDMuNCwxLjYsNC42LDBjMi4zLTMuMSw1LjMtNS4zLDguMy03LjhDNzcuOSwyNCw3NC43LDIwLjIsNzEuOSwyMS43eiIvPgoNPC9nPgoNPHBhdGggY2xhc3M9InN0MSIgZD0iTTEwLjQsNTIuMWMxLjQtMS40LDIuOC0yLjcsNC4yLTQuMWMxLjQtMS40LDMuNC0yLjcsMy40LTQuOGMwLTEuMi0xLTIuMi0yLjItMi4yYy0yLjMsMC4xLTMuNSwyLjItNC44LDMuOCAgICBjLTEuMiwxLjYtMi4yLDMuNS0zLjIsNS4zQzcuMSw1MS43LDkuMSw1My41LDEwLjQsNTIuMUwxMC40LDUyLjF6Ii8+Cg08cGF0aCBjbGFzcz0ic3QxIiBkPSJNMjEuMiw1Mi44YzEuNC0xLjEsMi44LTIuMiw0LjItMy4zYzEuMy0xLjEsMy4xLTIuMiwzLjgtMy44YzEtMi4yLTEuMS00LjktMy41LTMuNWMtMS43LDAuOS0yLjYsMi45LTMuNiw0LjQgICAgYy0xLDEuNS0yLDMuMS0yLjksNC43QzE4LjMsNTIuNSwyMC4xLDUzLjYsMjEuMiw1Mi44TDIxLjIsNTIuOHoiLz4KDTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik02NS42LDUyLjFjMS40LTEuNCwyLjgtMi43LDQuMi00LjFjMS40LTEuNCwzLjQtMi43LDMuNC00LjhjMC0xLjItMS0yLjItMi4yLTIuMmMtMi4zLDAuMS0zLjUsMi4yLTQuOCwzLjggICAgYy0xLjIsMS42LTIuMiwzLjUtMy4yLDUuM0M2Mi4zLDUxLjcsNjQuMyw1My41LDY1LjYsNTIuMUw2NS42LDUyLjF6Ii8+Cg08cGF0aCBjbGFzcz0ic3QxIiBkPSJNNzYuNCw1Mi44YzEuNC0xLjEsMi44LTIuMiw0LjItMy4zYzEuMy0xLjEsMy4xLTIuMiwzLjgtMy44YzEtMi4yLTEuMS00LjktMy41LTMuNWMtMS43LDAuOS0yLjYsMi45LTMuNiw0LjQgICAgYy0xLDEuNS0yLDMuMS0yLjksNC43QzczLjUsNTIuNSw3NS4zLDUzLjYsNzYuNCw1Mi44TDc2LjQsNTIuOHoiLz4KDTwvZz4KDTwvZz4KDTwvc3ZnPg==
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 弹幕解析功能
    var am = false;
    var moving = false;
    var logo = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PgoNPCEtLSBVcGxvYWRlZCB0bzogU1ZHIFJlcG8sIHd3dy5zdmdyZXBvLmNvbSwgR2VuZXJhdG9yOiBTVkcgUmVwbyBNaXhlciBUb29scyAtLT4KPHN2ZyB3aWR0aD0iODAwcHgiIGhlaWdodD0iODAwcHgiIHZpZXdCb3g9IjAgMCA5MSA5MSIgaWQ9IkxheWVyXzEiIHZlcnNpb249IjEuMSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+Cg08c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDojNEU3QTlFO30NCgkuc3Qxe2ZpbGw6I0YwQURBQjt9DQo8L3N0eWxlPgoNPGc+Cg08Zz4KDTxnPgoNPHBhdGggY2xhc3M9InN0MCIgZD0iTTU1LjQsNTMuNmMyLjEtMi4xLDMuMi00LjgsMS43LThjLTIuMy00LjctMTAuMy01LjUtMTMuMy0xLjNjLTAuNiwwLjgsMC4xLDEuOCwwLjgsMi4xICAgICBjMi4zLDAuOCw1LjMtMSw3LjQsMC40YzMuNiwyLjMtMC44LDUuMi0zLjIsNS45Yy0yLjcsMC44LTEuNiw0LjksMS4yLDQuMmMzLjctMC45LDYuMSwyLjgsNC40LDZjLTEuNywzLTUuMywzLjItOCwxLjcgICAgIGMtMy43LTItOC4xLDMuMS00LjYsNmMyLjgsMi40LDcuNiwxLjcsMTAuOCwwLjNjMy4xLTEuNCw1LjctNCw2LjYtNy40QzYwLjEsNTkuNiw1OC40LDU1LjYsNTUuNCw1My42eiIvPgoNPHBhdGggY2xhc3M9InN0MCIgZD0iTTMzLjIsMjAuOWMtMi44LDEuNS01LjEsMy45LTcuMSw2LjRjLTIuNC0zLjEtNS42LTYuMi05LjMtNi4zYy0xLjcsMC0yLjUsMi4xLTEuMywzLjJjMi45LDMsNiw1LjMsOC4zLDguOSAgICAgYzEuMSwxLjgsMy40LDEuNiw0LjYsMGMyLjMtMy4xLDUuMy01LjMsOC4zLTcuOEMzOS4xLDIzLjIsMzUuOSwxOS40LDMzLjIsMjAuOXoiLz4KDTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik03MS45LDIxLjdjLTIuOCwxLjUtNS4xLDMuOS03LjEsNi40Yy0yLjQtMy4xLTUuNi02LjItOS4zLTYuM2MtMS43LDAtMi41LDIuMS0xLjMsMy4yYzIuOSwzLDYsNS4zLDguMyw4LjkgICAgIGMxLjEsMS44LDMuNCwxLjYsNC42LDBjMi4zLTMuMSw1LjMtNS4zLDguMy03LjhDNzcuOSwyNCw3NC43LDIwLjIsNzEuOSwyMS43eiIvPgoNPC9nPgoNPHBhdGggY2xhc3M9InN0MSIgZD0iTTEwLjQsNTIuMWMxLjQtMS40LDIuOC0yLjcsNC4yLTQuMWMxLjQtMS40LDMuNC0yLjcsMy40LTQuOGMwLTEuMi0xLTIuMi0yLjItMi4yYy0yLjMsMC4xLTMuNSwyLjItNC44LDMuOCAgICBjLTEuMiwxLjYtMi4yLDMuNS0zLjIsNS4zQzcuMSw1MS43LDkuMSw1My41LDEwLjQsNTIuMUwxMC40LDUyLjF6Ii8+Cg08cGF0aCBjbGFzcz0ic3QxIiBkPSJNMjEuMiw1Mi44YzEuNC0xLjEsMi44LTIuMiw0LjItMy4zYzEuMy0xLjEsMy4xLTIuMiwzLjgtMy44YzEtMi4yLTEuMS00LjktMy41LTMuNWMtMS43LDAuOS0yLjYsMi45LTMuNiw0LjQgICAgYy0xLDEuNS0yLDMuMS0yLjksNC43QzE4LjMsNTIuNSwyMC4xLDUzLjYsMjEuMiw1Mi44TDIxLjIsNTIuOHoiLz4KDTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik02NS42LDUyLjFjMS40LTEuNCwyLjgtMi43LDQuMi00LjFjMS40LTEuNCwzLjQtMi43LDMuNC00LjhjMC0xLjItMS0yLjItMi4yLTIuMmMtMi4zLDAuMS0zLjUsMi4yLTQuOCwzLjggICAgYy0xLjIsMS42LTIuMiwzLjUtMy4yLDUuM0M2Mi4zLDUxLjcsNjQuMyw1My41LDY1LjYsNTIuMUw2NS42LDUyLjF6Ii8+Cg08cGF0aCBjbGFzcz0ic3QxIiBkPSJNNzYuNCw1Mi44YzEuNC0xLjEsMi44LTIuMiw0LjItMy4zYzEuMy0xLjEsMy4xLTIuMiwzLjgtMy44YzEtMi4yLTEuMS00LjktMy41LTMuNWMtMS43LDAuOS0yLjYsMi45LTMuNiw0LjQgICAgYy0xLDEuNS0yLDMuMS0yLjksNC43QzczLjUsNTIuNSw3NS4zLDUzLjYsNzYuNCw1Mi44TDc2LjQsNTIuOHoiLz4KDTwvZz4KDTwvZz4KDTwvc3ZnPg==";;

    // 如果当前网址是 https://rdfplayer.mrgaocloud.com/,不创建图标
    if (window.location.hostname !== 'rdfplayer.mrgaocloud.com') {
        // 拖拽功能
        var startDrag = function(target) {
            var getCss = function(o, key) {
                return o.currentStyle ? o.currentStyle[key] : document.defaultView.getComputedStyle(o, false)[key];
            };
            var params = { left: 0, top: 0, currentX: 0, currentY: 0, rectLeft: 0, rectTop: 0, rectRight: 0 };
            if (getCss(target, "position") === "static") {
                target.style.position = "relative";
            }
            if (getCss(target, "left") !== "auto") {
                params.left = getCss(target, "left");
            }
            if (getCss(target, "top") !== "auto") {
                params.top = getCss(target, "top");
            }
            target.addEventListener("mousedown", function(event) {
                moving = true;
                params.rectLeft = target.getBoundingClientRect().left + document.body.scrollLeft;
                params.rectTop = target.getBoundingClientRect().top + document.body.scrollTop;
                params.rectRight = document.documentElement.clientWidth - target.getBoundingClientRect().right;
                if (event.preventDefault) {
                    event.preventDefault();
                } else {
                    event.returnValue = false;
                }
                var e = event;
                params.currentX = e.clientX;
                params.currentY = e.clientY;
                document.addEventListener("mousemove", function(event) {
                    if (moving == false) {
                        return 0;
                    }
                    am = true;
                    var e = event ? event : window.event;
                    var nowX = e.clientX,
                        nowY = e.clientY;
                    var disX = nowX - params.currentX,
                        disY = nowY - params.currentY;
                    if (disX < 0 && Math.abs(disX) > params.rectLeft) {
                        disX = -params.rectLeft;
                    }
                    if (disY < 0 && Math.abs(disY) > params.rectTop) {
                        disY = -params.rectTop;
                    }
                    if (disX > 0 && disX > params.rectRight) {
                        disX = params.rectRight;
                    }
                    target.style.left = parseInt(params.left) + disX + "px";
                    target.style.top = parseInt(params.top) + disY + "px";
                });

                document.addEventListener("mouseup", function() {
                    moving = false;
                    setTimeout(function() { am = false; }, 50);
                    if (getCss(target, "left") !== "auto") {
                        params.left = getCss(target, "left");
                    }
                    if (getCss(target, "top") !== "auto") {
                        params.top = getCss(target, "top");
                    }
                });
            });
        };

        // 创建图标
        var ele = document.createElement("img");
        ele.id = "imgid";
        ele.style = "margin: 250px 0px 0px 10px;width:60px;position: fixed;top:0px;z-index: 99999;";
        ele.src = logo;
        document.body.appendChild(ele);
        startDrag(document.getElementById('imgid'));

        // 点击事件:跳转解析站并传递B站地址
document.getElementById("imgid").addEventListener("click", function(e) {
    if (am == false) {
        // 重置状态
        hasPlayed = false;
        moving = false;

        // 直接打开带URL参数的解析站
        var videoUrl = encodeURIComponent(window.location.href);
        var targetUrl = `https://rdfplayer.mrgaocloud.com/?url=${videoUrl}`;

        // 打开新页面
        window.open(targetUrl, "_blank");
    }
  });
}

    // 创建自定义提示框
const customHint = document.createElement('div');
customHint.style.position = 'absolute';
customHint.style.top = '50%'; // 修改为 50%,垂直居中
customHint.style.left = '50%'; // 修改为 50%,水平居中
customHint.style.transform = 'translate(-50%, -50%)'; // 修改为 translate(-50%, -50%),精确居中
customHint.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';
customHint.style.color = 'white';
customHint.style.padding = '5px 10px';
customHint.style.borderRadius = '5px';
customHint.style.display = 'none';
document.body.appendChild(customHint);

    // 进度条前进90秒: Ctrl + →
document.addEventListener('keydown', function(event) {
    if (event.ctrlKey && event.key === 'ArrowRight') {
        const video = document.querySelector('video');
        if (video) {
            event.preventDefault();  // 阻止默认行为
            video.currentTime += 90;  // 前进90秒
            customHint.textContent = '快进90秒';
            customHint.style.display = 'block';
            setTimeout(() => customHint.style.display = 'none', 1000);  // 1秒后隐藏提示
        }
    }
});

    // 进度条后退90秒: Ctrl + ←
document.addEventListener('keydown', function(event) {
    if (event.ctrlKey && event.key === 'ArrowLeft') {
        const video = document.querySelector('video');
        if (video) {
            event.preventDefault();  // 阻止默认行为
            video.currentTime -= 90;  // 后退90秒
            customHint.textContent = '快退90秒';
            customHint.style.display = 'block';
            setTimeout(() => customHint.style.display = 'none', 1000);  // 1秒后隐藏提示
        }
    }
});

// 限定网页生效的条件
if (window.location.hostname.includes('rdfplayer.mrgaocloud.com') || window.location.pathname.includes('/player/')) {

    // 弹幕开关功能:D键控制
    document.addEventListener('keydown', function(event) {
        if (event.key === 'D' || event.key === 'd') {
            const commentButton = document.querySelector('.rdfplayer-comment-state-icon');
            if (commentButton) {
                commentButton.click();  // 模拟点击切换弹幕
            }
        }
    });

    // 全屏开关功能:Enter
    document.addEventListener('keydown', function(event) {
        if (event.key === 'Enter') {
            const fullScreenButton = document.querySelector('.rdfplayer-full-icon');
            const exitFullScreenButton = document.querySelector('.rdfplayer-icon.rdfplayer-full-icon');

            // 使用 document.fullscreenElement 判断是否处于全屏状态
            if (document.fullscreenElement) {
                // 如果是全屏,点击退出全屏按钮
                if (exitFullScreenButton) {
                    exitFullScreenButton.click();
                }
            } else {
                // 如果不是全屏,点击进入全屏按钮
                if (fullScreenButton) {
                    fullScreenButton.click();
                }
            }
        }
    });

    // 空格控制播放
    let isSpaceKeyEnabled = true; // 标志位,控制空格键功能是否启用

    // 播放/暂停视频的函数
    function toggleVideoPlayback() {
        const videoElement = document.querySelector('video'); // 获取 video 元素
        if (videoElement) {
            if (videoElement.paused) {
                videoElement.play(); // 如果视频暂停,则播放
            } else {
                videoElement.pause(); // 如果视频正在播放,则暂停
            }
        }
    }

    // 键盘事件监听
    document.addEventListener('keydown', function(event) {
        if (event.key === 'Escape' || event.key === 'Enter') {
            // 如果按下 Esc 或 Enter 键,禁用空格键功能
            isSpaceKeyEnabled = false;
        }

        if (event.key === ' ' && isSpaceKeyEnabled) { // 检测空格键且功能未禁用
            event.preventDefault(); // 防止空格键触发页面滚动
            toggleVideoPlayback(); // 调用播放/暂停函数
        }
    });

    // 鼠标点击事件监听
    document.addEventListener('click', function(event) {
        if (event.button === 0) { // 检测鼠标左键点击
            const videoElement = document.querySelector('video');
            if (videoElement && videoElement.contains(event.target)) { // 检查点击目标是否是视频本身
                toggleVideoPlayback(); // 调用播放/暂停函数
            }
            isSpaceKeyEnabled = false; // 禁用空格键功能
        }
    });
}
    // 自动播放功能
let hasPlayed = false;
const iframe = document.getElementById("RDFPLAYER_VOD_IFRAME");

if (!iframe) {
    console.error("Iframe not found!");
    return;
}

// 显示自定义提示框
function showFocusTip() {
    // 创建自定义提示框
    const tipBox = document.createElement("div");
    tipBox.id = "focus-tip-box";
    tipBox.style.position = "fixed";
    tipBox.style.top = "20px";
    tipBox.style.left = "50%";
    tipBox.style.transform = "translateX(-50%)";
    tipBox.style.padding = "10px 20px";
    tipBox.style.backgroundColor = "rgba(0, 0, 0, 0.8)";
    tipBox.style.color = "white";
    tipBox.style.borderRadius = "5px";
    tipBox.style.zIndex = "9999";
    tipBox.style.fontSize = "16px";
    tipBox.innerText = "为确保视频正常进入全屏,可选择点击一次播放器的加载页";

    // 添加到页面上
    document.body.appendChild(tipBox);

    // 自动关闭提示框,5秒后
    setTimeout(() => {
        if (tipBox) {
            tipBox.style.display = "none"; // 隐藏提示框
        }
    }, 5000);
}

// 处理 iframe 加载后的操作
function handleIframeLoad() {
    if (hasPlayed) return;
    hasPlayed = true;

    // 延迟执行播放操作
    setTimeout(function() {
        const playButton = document.getElementById("ssdi");
        if (playButton) {
            playButton.click();
        } else {
            console.error("Play button not found!");
        }

        const message = { action: "play" };
        iframe.contentWindow.postMessage(message, "*");

        // 增加延迟以确保内容加载完毕
        setTimeout(() => {
            enterFullscreen();
        }, 2000); // 增加2秒延迟
    }, 3000);
}

// 监听 iframe 的 onload 事件
iframe.onload = handleIframeLoad;

// 监听 iframe src 属性变化
let previousSrc = iframe.src;
const observer = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
        if (mutation.type === 'attributes' && mutation.attributeName === 'src') {
            previousSrc = iframe.src;
            iframe.onload = handleIframeLoad;
        }
    });
});

observer.observe(iframe, { attributes: true });

// 检查 iframe src 是否为空或特定值,如果是,则设置新的 src,并弹出提示框
if (!iframe.src || iframe.src === "https://rdfplayer.mrgaocloud.com/player/?url=") {
    iframe.src = "https://rdfplayer.mrgaocloud.com/player/?url=VALID_VIDEO_URL&t=" + Date.now();
    showFocusTip(); // 弹出提示框
} else {
    iframe.src = iframe.src + "&t=" + Date.now(); // 添加时间戳参数
}

    //进入全屏
function enterFullscreen() {
    try {
        if (iframe.requestFullscreen) {
            iframe.requestFullscreen().then(() => {
                iframe.contentWindow.focus(); // 将焦点设置到 iframe 的 contentWindow
            });
        } else if (iframe.mozRequestFullScreen) {
            iframe.mozRequestFullScreen().then(() => {
                iframe.contentWindow.focus();
            });
        } else if (iframe.webkitRequestFullscreen) {
            iframe.webkitRequestFullscreen().then(() => {
                iframe.contentWindow.focus();
            });
        } else if (iframe.msRequestFullscreen) {
            iframe.msRequestFullscreen().then(() => {
                iframe.contentWindow.focus();
            });
        } else {
            console.error("Fullscreen API is not supported.");
        }
    } catch (error) {
        console.error("Failed to enter fullscreen:", error);
    }
  }
})();