docker-jellyfin迁移指南:从Plex/Emby平滑过渡到开源媒体系统
2026/6/10 4:19:08
/** * 页面保护(仅生产环境生效) * 1. 禁止右键 * 2. 禁止F12 / 审查元素快捷键 * 3. 检测控制台是否打开 → 锁定页面 * 开发环境 npm run serve 不生效 */ export function initPageProtect() { // ============================================== // 仅 生产环境 开启保护 // ============================================== if (process.env.NODE_ENV !== 'production') { return } // 1. 禁止右键菜单 document.addEventListener('contextmenu', (e) => { e.preventDefault() }) // 2. 禁止键盘调试快捷键 document.addEventListener('keydown', (e) => { if (e.key === 'F12') e.preventDefault() if (e.ctrlKey && e.shiftKey && e.key === 'I') e.preventDefault() if (e.ctrlKey && e.key === 'u') e.preventDefault() if (e.ctrlKey && e.shiftKey && e.key === 'J') e.preventDefault() if (e.ctrlKey && e.shiftKey && e.key === 'C') e.preventDefault() }) } /** * 检测开发者工具是否打开(仅生产环境生效) */ export function startConsoleCheck() { if (process.env.NODE_ENV !== 'production') { return } setInterval(() => { // 1. 检测窗口宽度差 const widthDiff = window.outerWidth - window.innerWidth const heightDiff = window.outerHeight - window.innerHeight const devOpenBySize = widthDiff > 160 || heightDiff > 160 // 2. 检测 debugger 时间差 let devOpenByDebugger = false const start = performance.now() debugger if (performance.now() - start > 100) { devOpenByDebugger = true } // 检测到 → 锁定页面 if (devOpenBySize || devOpenByDebugger) { document.documentElement.innerHTML = ` <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> *{margin:0;padding:0;box-sizing:border-box} body{background:#fff;font-family:Arial;padding:20px;display:flex;align-items:center;justify-content:center;height:100vh} .tips{text-align:center} h2{color:#f56c6c;margin-bottom:10px;font-size:18px} p{color:#666;font-size:14px} </style> </head> <body> <div class="tips"> <h2>⚠️ 禁止打开开发者工具</h2> <p>请关闭审查元素后刷新页面</p> </div> </body> </html> ` } }, 500) }在main.js中导入即可使用
import { initPageProtect,startConsoleCheck } from '@/utils/device' initPageProtect() startConsoleCheck()