// ==UserScript== // @name JavaScript开关 // @namespace http://tampermonkey.net/ // @version 5.0 // @description 为每个网站独立开关 JavaScript,自动允许常用视频网站脚本(如 YouTube、B站等)以保留播放功能。点击菜单切换后自动刷新。 // @author YourName // @match *://*/* // @run-at document-start // @grant GM_registerMenuCommand // @grant GM_getValue // @grant GM_setValue // @all-frames true // @icon data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZpZXdCb3g9IjAgMCA2NCA2NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSIzMiIgY3k9IjMyIiByPSIzMCIgZmlsbD0iIzIxOTZGMyIgc3Ryb2tlPSIjMEQ0N0ExIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMiIgeT0iMzYiIGZvbnQtZmFtaWx5PSJBcmlhbCwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSIyNCIgZm9udC13ZWlnaHQ9ImJvbGQiIGZpbGw9IndoaXRlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIj5KUzwvdGV4dD48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMiwgNTApIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjMiIGZpbGw9Im5vbmUiPjxjaXJjbGUgY3g9IjAiIGN5PSIwIiByPSI4Ii8+PGxpbmUgeDE9IjAiIHkxPSItOCIgeDI9IjAiIHkyPSItMTYiLz48L2c+PC9zdmc+ // ==/UserScript== (function() { 'use strict'; const currentHost = location.hostname; const STORAGE_KEY = 'js_disabled_' + currentHost; // 默认允许的脚本域名列表(如需修改,请编辑此数组) const DEFAULT_ALLOWED_DOMAINS = [ 'youtube.com', 'bilibili.com', 'youku.com', 'v.qq.com', 'iqiyi.com', 'sohu.com', 'tudou.com', 'letv.com', 'mgtv.com', 'acfun.cn', 'dailymotion.com', 'vimeo.com' ]; // 读取当前网站的禁用状态(默认 false = 启用JS) let isDisabled = GM_getValue(STORAGE_KEY, false); // ---------- 工具函数:判断脚本是否应该被阻止 ---------- function shouldBlockScript(script) { // 如果有 src 属性(外部脚本) if (script.src) { try { const url = new URL(script.src, location.href); const scriptDomain = url.hostname; // 检查是否在默认允许域名列表内 return !DEFAULT_ALLOWED_DOMAINS.some(domain => scriptDomain === domain || scriptDomain.endsWith('.' + domain) ); } catch (e) { // URL 解析失败,默认阻止 return true; } } else { // 内联脚本:如果当前页面域名在允许列表内,则允许;否则阻止 return !DEFAULT_ALLOWED_DOMAINS.some(domain => currentHost === domain || currentHost.endsWith('.' + domain) ); } } // ---------- 禁用 JavaScript 的过滤方法 ---------- function disableJavaScript() { // 1. 删除所有不符合白名单的现有