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

Violentmonkey用户脚本@exclude规则无法针对特定URL生效导致无限循环问题

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

嘿,我帮你定位到了脚本无限循环的问题所在,主要是两个小疏漏导致的:一是@exclude规则的写法在Violentmonkey里没正确生效,二是脚本代码本身没有主动检查URL是否已经包含useskin=vector参数,完全依赖排除规则,一旦规则失效就会触发循环。

问题拆解

  • 你写的@exclude /useskin=vector/正则匹配不够精确,Violentmonkey的匹配逻辑里,这种模糊的正则可能无法正确捕获带该参数的各种URL场景(比如参数在查询串中间、末尾,或者和哈希共存的情况)。
  • 脚本设置了@run-at document-start,页面刚加载就执行跳转,但如果新URL没被@exclude拦截,脚本会再次执行,再次添加参数,陷入死循环。

修复后的完整代码

我重新调整了脚本,从根源上避免循环,同时优化了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';
    // 先检查是否已经设置了vector皮肤参数,有就直接退出
    const urlParams = new URLSearchParams(window.location.search);
    if (urlParams.has('useskin') && urlParams.get('useskin') === 'vector') {
        return;
    }

    // 简化URL拼接逻辑,利用原生属性更可靠
    const baseUrl = window.location.pathname + window.location.search;
    const hash = window.location.hash;
    const newUrl = baseUrl + (window.location.search ? '&' : '?') + 'useskin=vector' + hash;

    window.location.replace(newUrl);
})();

关键改动说明

  • 主动检查参数:用URLSearchParams这个原生API来读取查询参数,直接判断是否已经设置了useskin=vector,如果是就立刻退出脚本,从根源上杜绝循环。
  • 优化@exclude规则:改成更精确的通配符匹配,覆盖所有包含useskin=vector参数的URL场景,作为双重保险。
  • 简化URL拼接:不再手动截取字符串索引,而是用window.location的pathname、search、hash属性来拼接,避免手动处理索引时可能出现的错误。

这样修改后,不管是Firefox还是其他浏览器的Violentmonkey,都不会再出现无限循环的问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 10:04:06