// ==UserScript== // @name [VIP影视解析工具]红狐弹幕播放器 // @namespace http://tampermonkey.net/ // @version 0.4.7 // @description 基于红狐弹幕解析编写的脚本,支持腾讯视频、爱奇艺、优酷、芒果TV、PPTV、Bilibili等 // @author Aomine // @match *.rdfplayer.mrgaocloud.com/* // @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 *.mgtv.com/b/* // @license GPL License // @icon data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PgoNPCEtLSBVcGxvYWRlZCB0bzogU1ZHIFJlcG8sIHd3dy5zdmdyZXBvLmNvbSwgR2VuZXJhdG9yOiBTVkcgUmVwbyBNaXhlciBUb29scyAtLT4KPHN2ZyB3aWR0aD0iODAwcHgiIGhlaWdodD0iODAwcHgiIHZpZXdCb3g9IjAgMCA5MSA5MSIgaWQ9IkxheWVyXzEiIHZlcnNpb249IjEuMSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+Cg08c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDojNEU3QTlFO30NCgkuc3Qxe2ZpbGw6I0YwQURBQjt9DQo8L3N0eWxlPgoNPGc+Cg08Zz4KDTxnPgoNPHBhdGggY2xhc3M9InN0MCIgZD0iTTU1LjQsNTMuNmMyLjEtMi4xLDMuMi00LjgsMS43LThjLTIuMy00LjctMTAuMy01LjUtMTMuMy0xLjNjLTAuNiwwLjgsMC4xLDEuOCwwLjgsMi4xICAgICBjMi4zLDAuOCw1LjMtMSw3LjQsMC40YzMuNiwyLjMtMC44LDUuMi0zLjIsNS45Yy0yLjcsMC44LTEuNiw0LjksMS4yLDQuMmMzLjctMC45LDYuMSwyLjgsNC40LDZjLTEuNywzLTUuMywzLjItOCwxLjcgICAgIGMtMy43LTItOC4xLDMuMS00LjYsNmMyLjgsMi40LDcuNiwxLjcsMTAuOCwwLjNjMy4xLTEuNCw1LjctNCw2LjYtNy40QzYwLjEsNTkuNiw1OC40LDU1LjYsNTUuNCw1My42eiIvPgoNPHBhdGggY2xhc3M9InN0MCIgZD0iTTMzLjIsMjAuOWMtMi44LDEuNS01LjEsMy45LTcuMSw2LjRjLTIuNC0zLjEtNS42LTYuMi05LjMtNi4zYy0xLjcsMC0yLjUsMi4xLTEuMywzLjJjMi45LDMsNiw1LjMsOC4zLDguOSAgICAgYzEuMSwxLjgsMy40LDEuNiw0LjYsMGMyLjMtMy4xLDUuMy01LjMsOC4zLTcuOEMzOS4xLDIzLjIsMzUuOSwxOS40LDMzLjIsMjAuOXoiLz4KDTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik03MS45LDIxLjdjLTIuOCwxLjUtNS4xLDMuOS03LjEsNi40Yy0yLjQtMy4xLTUuNi02LjItOS4zLTYuM2MtMS43LDAtMi41LDIuMS0xLjMsMy4yYzIuOSwzLDYsNS4zLDguMyw4LjkgICAgIGMxLjEsMS44LDMuNCwxLjYsNC42LDBjMi4zLTMuMSw1LjMtNS4zLDguMy03LjhDNzcuOSwyNCw3NC43LDIwLjIsNzEuOSwyMS43eiIvPgoNPC9nPgoNPHBhdGggY2xhc3M9InN0MSIgZD0iTTEwLjQsNTIuMWMxLjQtMS40LDIuOC0yLjcsNC4yLTQuMWMxLjQtMS40LDMuNC0yLjcsMy40LTQuOGMwLTEuMi0xLTIuMi0yLjItMi4yYy0yLjMsMC4xLTMuNSwyLjItNC44LDMuOCAgICBjLTEuMiwxLjYtMi4yLDMuNS0zLjIsNS4zQzcuMSw1MS43LDkuMSw1My41LDEwLjQsNTIuMUwxMC40LDUyLjF6Ii8+Cg08cGF0aCBjbGFzcz0ic3QxIiBkPSJNMjEuMiw1Mi44YzEuNC0xLjEsMi44LTIuMiw0LjItMy4zYzEuMy0xLjEsMy4xLTIuMiwzLjgtMy44YzEtMi4yLTEuMS00LjktMy41LTMuNWMtMS43LDAuOS0yLjYsMi45LTMuNiw0LjQgICAgYy0xLDEuNS0yLDMuMS0yLjksNC43QzE4LjMsNTIuNSwyMC4xLDUzLjYsMjEuMiw1Mi44TDIxLjIsNTIuOHoiLz4KDTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik02NS42LDUyLjFjMS40LTEuNCwyLjgtMi43LDQuMi00LjFjMS40LTEuNCwzLjQtMi43LDMuNC00LjhjMC0xLjItMS0yLjItMi4yLTIuMmMtMi4zLDAuMS0zLjUsMi4yLTQuOCwzLjggICAgYy0xLjIsMS42LTIuMiwzLjUtMy4yLDUuM0M2Mi4zLDUxLjcsNjQuMyw1My41LDY1LjYsNTIuMUw2NS42LDUyLjF6Ii8+Cg08cGF0aCBjbGFzcz0ic3QxIiBkPSJNNzYuNCw1Mi44YzEuNC0xLjEsMi44LTIuMiw0LjItMy4zYzEuMy0xLjEsMy4xLTIuMiwzLjgtMy44YzEtMi4yLTEuMS00LjktMy41LTMuNWMtMS43LDAuOS0yLjYsMi45LTMuNiw0LjQgICAgYy0xLDEuNS0yLDMuMS0yLjksNC43QzczLjUsNTIuNSw3NS4zLDUzLjYsNzYuNCw1Mi44TDc2LjQsNTIuOHoiLz4KDTwvZz4KDTwvZz4KDTwvc3ZnPg== // @grant none // @downloadURL 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: 150px 0px 0px 10px;width:60px;position: fixed;top:0px;z-index: 99999;"; ele.src = logo; document.body.appendChild(ele); startDrag(document.getElementById('imgid')); // 跳转解析站并传递B站地址的函数 function jumpToPlayer() { 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"); } } // 点击事件 document.getElementById("imgid").addEventListener("click", jumpToPlayer); // 键盘快捷键事件 document.addEventListener("keydown", function(e) { // 检测是否按下 Shift + F9 if (e.shiftKey && e.key === "F9") { jumpToPlayer(); } }); } // 创建自定义提示框 const customHint = document.createElement('div'); customHint.style.position = 'fixed'; // 固定位置,脱离父元素限制 customHint.style.top = '50%'; customHint.style.left = '50%'; customHint.style.transform = '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'; customHint.style.zIndex = '9999'; // 确保在最上层 // 初始挂载(先加到 body) document.body.appendChild(customHint); // 监听全屏变化,确保提示框始终添加在全屏容器中 document.addEventListener('fullscreenchange', () => { const fsElement = document.fullscreenElement; if (fsElement && !fsElement.contains(customHint)) { fsElement.appendChild(customHint); } else if (!fsElement && !document.body.contains(customHint)) { document.body.appendChild(customHint); } }); // 快进/快退90s控制:Ctrl+←& Ctrl+→ document.addEventListener('keydown', function(e) { // 只处理Ctrl+方向键的组合 if (!e.ctrlKey || (e.code !== 'ArrowLeft' && e.code !== 'ArrowRight')) return; // 排除输入框的情况 if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') return; // 获取视频元素 const video = document.querySelector('video'); if (!video) { console.warn('未找到video元素'); return; } e.preventDefault(); // 阻止默认行为 const seekAmount = 90; // 快进/快退的秒数 let feedbackText = ''; if (e.code === 'ArrowLeft') { video.currentTime = Math.max(0, video.currentTime - seekAmount); feedbackText = `后退90秒,当前: ${formatTime(video.currentTime)}`; } else if (e.code === 'ArrowRight') { video.currentTime = Math.min(video.duration, video.currentTime + seekAmount); feedbackText = `快进90秒,当前: ${formatTime(video.currentTime)}`; } // 显示反馈提示 customHint.textContent = feedbackText; customHint.style.display = 'block'; setTimeout(() => customHint.style.display = 'none', 2000); }); // 格式化时间的函数 function formatTime(seconds) { const minutes = Math.floor(seconds / 60); const secs = Math.floor(seconds % 60); return `${minutes}:${secs < 10 ? '0' + secs : secs}`; } // 限定网页生效的条件 if (window.location.hostname.includes('rdfplayer.mrgaocloud.com') || window.location.pathname.includes('/player/')) { // 弹幕开关功能:D let danmakuToggleCount = 0; // 使用捕获阶段监听键盘事件,确保在全屏模式下也能捕获 document.addEventListener('keydown', function(event) { // 只在按下D/d键时触发 if (event.key.toLowerCase() === 'd') { // 阻止默认行为并停止传播,避免被播放器拦截 event.preventDefault(); event.stopPropagation(); // 尝试查找弹幕按钮(全屏和窗口模式下的不同位置) let commentButton = document.querySelector('.rdfplayer-comment-state-icon'); if (commentButton) { commentButton.click(); // 模拟点击切换弹幕 // 更新计数器并显示反馈 danmakuToggleCount++; const statusText = danmakuToggleCount % 2 === 1 ? "弹幕关" : "弹幕开"; showDanmakuFeedback(statusText); } } }, true); // 注意这里使用了捕获阶段 // 显示弹幕状态反馈提示 function showDanmakuFeedback(text) { // 移除已存在的反馈提示 const existingFeedback = document.querySelector('.danmaku-feedback'); if (existingFeedback) { existingFeedback.remove(); } // 创建新的反馈提示 const feedback = document.createElement('div'); feedback.className = 'danmaku-feedback'; feedback.style.position = 'fixed'; feedback.style.top = '50%'; feedback.style.left = '50%'; feedback.style.transform = 'translate(-50%, -50%)'; feedback.style.backgroundColor = 'rgba(0, 0, 0, 0.7)'; feedback.style.color = 'white'; feedback.style.padding = '10px 20px'; feedback.style.borderRadius = '5px'; feedback.style.fontSize = '16px'; feedback.style.fontWeight = 'bold'; feedback.style.zIndex = '9999'; feedback.innerText = text; // 获取全屏元素或使用body const container = document.fullscreenElement || document.body; container.appendChild(feedback); // 2秒后移除反馈提示 setTimeout(() => { feedback.remove(); }, 2000); } // 全屏开关功能: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(); }, 0); },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); } } })(); (function() { 'use strict'; // 用于广告拦截的元素选择器列表 const selectorsToBlock = [ '#pause-ad-close', '#pause-ad-tip', '#pause-ad-vod', '.ad-type-vod.player-pause-ad', '.footer > p' ]; // 拦截图片广告 const blockedImageUrls = [ 'lcdn.redfoxw.com/cache/taobao/ad2.gif' ]; // 移除广告元素的函数 function removeAds() { selectorsToBlock.forEach(selector => { document.querySelectorAll(selector).forEach(element => { element.remove(); }); }); // 拦截图片广告 document.querySelectorAll('img').forEach(img => { if (blockedImageUrls.some(url => img.src.includes(url))) { img.remove(); } }); } // 使用 MutationObserver 监测 DOM 变化 const observer = new MutationObserver(function(mutations) { removeAds(); }); // 开始观察 DOM 变化 observer.observe(document.body, { childList: true, subtree: true }); // 初始执行一次 removeAds(); // 监听动态加载的内容(如通过 AJAX) document.addEventListener('DOMContentLoaded', removeAds); window.addEventListener('load', removeAds); })();