Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.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 有没有办法退出Greasemonkey脚本?_Javascript_Greasemonkey - Fatal编程技术网

Javascript 有没有办法退出Greasemonkey脚本?

Javascript 有没有办法退出Greasemonkey脚本?,javascript,greasemonkey,Javascript,Greasemonkey,我知道你可以使用return从Greasemonkey脚本返回,但仅当您不在其他函数中时。例如,这将不起作用: // Begin greasemonkey script function a(){ return; // Only returns from the function, not the script } // End greasemonkey script 是否有一个内置的Greasemonkey函数允许我从脚本中的任何地方停止脚本的执行 谢谢你,是的,你可能可以做如下事情

我知道你可以使用
return
从Greasemonkey脚本返回,但仅当您不在其他函数中时。例如,这将不起作用:

// Begin greasemonkey script
function a(){
    return; // Only returns from the function, not the script
}
// End greasemonkey script
是否有一个内置的Greasemonkey函数允许我从脚本中的任何地方停止脚本的执行


谢谢你,

是的,你可能可以做如下事情:

(function loop(){
    setTimeout(function(){
        if(parameter === "abort") {
            throw new Error("Stopped JavaScript.");
        }
        loop();
  }, 1000);
})(parameter);
您可以通过将variable参数的值设置为abort来中止脚本,它可以是常规变量,也可以是Greasemonkey变量。如果它是Greasemonkey变量,那么您可以在Firefox中使用about:config直接通过浏览器修改它

是否有一个内置的Greasemonkey函数允许我从脚本中的任何地方停止脚本的执行

没有


你们可以抛出一个例外,就像安德斯的回答一样,但我不喜欢例外,除非在特殊情况下

总是有一个古老的经典,
do while

// Begin greasemonkey script
var ItsHarikariTime = false;

do {
    function a(){
        ItsHarikariTime = true;
        return; // Only returns from the function, not the script
    }
    if (ItsHarikariTime)    break;

} while (0)
// End greasemonkey script


或者,您可以使用函数返回而不是局部全局。

如果您在函数的嵌套调用中,throw似乎是一起退出脚本的唯一解决方案。但是,如果您想在脚本中的某个地方(而不是在函数调用中)退出脚本,我建议将所有脚本包装到一个匿名函数中

// begin greasemonkey script

(function(){


// all contents of the script, can include function defs and calls
...
...
if <...>
    return;  // this exits the script
...
...



})(); // this calls the whole script as a single function
//开始greasemonkey脚本
(功能(){
//脚本的所有内容都可以包括函数def和调用
...
...
如果
return;//这将退出脚本
...
...
})(); // 这会将整个脚本作为单个函数调用

我想抛出一个错误。但是,这会干扰页面上的其他脚本吗?@SimpleCoder,不会。我的其他Greasemonkey脚本,用于同一页面,并且本机脚本工作正常。只需添加一点:如果使用标签:
do while
技巧也适用于嵌套循环:
main:do{/*…*/break main;}while(false)这里的问题是,您需要移动大块代码并将其放在do/while中,而我的解决方案只是附加到GM脚本的开头。