Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Userscript永远运行(持续重新加载页面,而不是重定向一次)_Javascript_Userscripts_Tampermonkey - Fatal编程技术网

Javascript Userscript永远运行(持续重新加载页面,而不是重定向一次)

Javascript Userscript永远运行(持续重新加载页面,而不是重定向一次),javascript,userscripts,tampermonkey,Javascript,Userscripts,Tampermonkey,使用Tampermonkey在Chrome中执行用户脚本时遇到问题 脚本的思想是将字符串&f=%20license:“Creative+Commons+0”附加到urlfreesound.org/search,以防在那里找不到它 问题是,当userscript应该添加字符串一次时,它却不断地添加字符串 代码如下: /==UserScript== //@name Freesound CC0 //@匹配https://freesound.org/search* //==/UserScript== (

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

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

问题是,当userscript应该添加字符串一次时,它却不断地添加字符串

代码如下:

/==UserScript==
//@name Freesound CC0
//@匹配https://freesound.org/search*
//==/UserScript==
(功能(){
"严格使用",;
如果(!window.location.href.match(/f=%20license:“Creative+Commons+0”/)){
window.location.href+='&f=%20许可证:“Creative+Commons+0”;
}
})();
尝试使用此正则表达式

f=%20license:"Creative\+Commons\+0"
请注意加号前面的反斜杠,请尝试使用此正则表达式

f=%20license:"Creative\+Commons\+0"
请注意加号前面的反斜杠有两个(或三个)问题:

  • 添加到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的字符串中的字符
    被编码为
    %22
    ,正则表达式在下一次迭代中将不匹配该字符
  • 您需要在正则表达式中转义
    +
  • URL中的大写字符可能会被服务器更改为小写;您可能需要使regex不区分大小写(使用
    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的情况,那么regex中需要
i
标志。啊,这一点很好!另外一个问题是,一些服务器仍然会使用小写URL,因此
Creative+Commons
会变成
Creative+Commons
。如果这是OP的情况,那么regex中需要
i
标志。啊,这一点很好!在回答中添加了这一点,我确信这个答案的URL编码部分也存在重复。我相信这个答案的URL编码部分也有重复。稍后,我会尽量记得找到它。