【问题标题】:Userscript runs forever (Continuously reloads page, instead of redirecting once) [duplicate]用户脚本永远运行(不断重新加载页面,而不是重定向一次)[重复]
【发布时间】:2019-02-06 13:19:39
【问题描述】:

我在 Chrome 中使用 Tampermonkey 执行用户脚本时遇到问题。

脚本的想法是将字符串 &f=%20license:"Creative+Commons+0" 附加到 url freesound.org/search 以防它在那里找不到它。

问题是用户脚本在应该执行一次的时候不断地追加字符串。

代码如下:

// ==UserScript==
// @name         Freesound CC0
// @match        https://freesound.org/search*
// ==/UserScript==

(function() {
    'use strict';
     if (!window.location.href.match(/f=%20license:"Creative+Commons+0"/)) {
         window.location.href += '&f=%20license:"Creative+Commons+0"';
     }
})();

【问题讨论】:

  • 我确信这个答案的 URL 编码部分也有欺骗性。稍后会尝试记住找到它。

标签: javascript userscripts tampermonkey


【解决方案1】:

尝试使用这个正则表达式

f=%20license:"Creative\+Commons\+0"

注意加号前的反斜杠

【讨论】:

    【解决方案2】:

    两个(或可能三个)问题:

    • 您附加到 URL 的字符串中的字符 " 被编码为 %22,正则表达式在下一次迭代中不会匹配。
    • 您需要转义正则表达式中的+
    • URL 中的大写字符可能会被服务器更改为小写;您可能需要使正则表达式不区分大小写(使用 i 标志)。

    这应该可行:

    (function() {
        'use strict';
         if (!window.location.href.match(/f=%20license:%22Creative\+Commons\+0%22/i)) {
             window.location.href += '&f=%20license:%22Creative+Commons+0%22';
         }
    })();
    

    【讨论】:

    • 另一个问题是一些服务器仍然会使用小写的 URL,所以Creative+Commons 变成了creative+commons。如果这是 OP 的情况,那么正则表达式中需要 i 标志。
    • 啊,好点子!将其添加到答案中
    猜你喜欢
    • 2011-11-19
    • 2014-02-22
    • 2019-03-10
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    相关资源
    最近更新 更多