// ==UserScript== // @name 抖音网页版全屏退出按钮修复 // @namespace https://www.douyin.com/ // @version 1.0.0 // @description 修复抖音网页版刷下一个视频后右下角全屏按钮无法正常退出的问题 // @author Wooksey // @license MIT // @match https://www.douyin.com/* // @run-at document-start // @grant none // ==/UserScript== (function () { 'use strict'; const DEBUG = false; function log(...args) { if (DEBUG) { console.log('[抖音全屏修复]', ...args); } } // 判断抖音当前是否处于网页全屏 function isDouyinFullscreen() { const slideList = document.querySelector('#slidelist'); return !!( document.fullscreenElement || slideList?.classList.contains('isCssFullScreen') ); } // 判断点击位置是否是右下角的全屏按钮 function isFullscreenButtonArea(event) { const x = event.clientX; const y = event.clientY; const width = window.innerWidth; const height = window.innerHeight; // 全屏按钮位于播放器控制栏最右侧 // 留出一定范围,适应不同窗口尺寸 return ( x >= width - 55 && y >= height - 60 ); } // 捕获阶段监听,优先于抖音自己的点击事件 document.addEventListener('click', function (event) { // 当前不是全屏 → 完全不干涉 if (!isDouyinFullscreen()) { return; } // 不是右下角区域 → 不干涉 if (!isFullscreenButtonArea(event)) { return; } log('检测到右下角点击'); log('fullscreenElement:', document.fullscreenElement); // 防止抖音错误执行“进入全屏” event.preventDefault(); event.stopPropagation(); event.stopImmediatePropagation(); // 当前已经全屏 → 执行真正的退出 if (document.fullscreenElement) { document.exitFullscreen() .then(() => { log('退出全屏成功'); }) .catch(error => { console.warn( '[抖音全屏修复] 退出全屏失败:', error ); }); } else { // 理论上一般不会走到这里 console.warn( '[抖音全屏修复] 检测到CSS全屏,但没有 fullscreenElement' ); } }, true); log('脚本已加载'); })();