You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Violentmonkey 用户脚本@exclude指令对特定URL失效问题排查

解决维基百科Vector脚本的无限循环问题

嘿,我帮你定位到了导致Firefox里无限循环的几个问题,咱们来逐个修复:

问题根源

  1. @exclude规则失效:你用的@exclude /useskin=vector/正则写法不符合Violentmonkey的匹配规则,它没能正确识别包含useskin=vector的URL,尤其是当URL里有特殊字符(比如电影页面的*)时,匹配逻辑直接失效。
  2. 脚本缺少自我检查:即使@exclude规则工作正常,脚本本身没有先判断当前URL是否已经携带useskin=vector参数,相当于少了一层防循环的保险。
  3. 手动截取URL的潜在错误:用substring手动拆分URL和锚点的方式,在遇到特殊字符时容易出现意外行为,比如带*的页面路径会打乱截取逻辑。

修正后的脚本代码

// ==UserScript==
// @name Wikipedia Vector
// @namespace Violentmonkey Scripts
// @match *://*.wikipedia.org/*
// @exclude *://*.wikipedia.org/
// @exclude *://*.wikipedia.org/*?*useskin=vector*
// @exclude *://*.wikipedia.org/*&*useskin=vector*
// @grant none
// @version 1.1
// @author -
// @run-at document-start
// ==/UserScript==
(function() {
'use strict';

// 先检查当前URL是否已经包含useskin=vector参数,有则直接退出
const url = new URL(window.location.href);
if (url.searchParams.has('useskin') && url.searchParams.get('useskin') === 'vector') {
    return;
}

// 安全添加参数,自动保留锚点和原有参数
url.searchParams.set('useskin', 'vector');
window.location.replace(url.href);
})();

关键改进说明

  • 更可靠的@exclude规则:改用通配符匹配所有包含useskin=vector的URL,不管参数是在?后还是&后,完全避免正则匹配的歧义问题。
  • 原生URL API处理参数:用浏览器原生的URL对象操作参数,比手动截取字符串更安全,能自动处理特殊字符(比如*)和锚点,不会破坏原有URL结构。
  • 双重防循环保障:既通过@exclude拦截目标URL,又在脚本开头主动检查参数,彻底杜绝无限跳转的可能。

这样修改后,不管是在Firefox还是其他浏览器,访问带特殊字符的维基百科页面都不会再出现无限循环问题啦。

内容的提问来源于stack exchange,提问作者combperm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 06:37:30