有没有办法退出Greasemonkey脚本?

时间:2011-01-10 20:59:48

标签: javascript greasemonkey

我知道您可以使用return;从Greasemonkey脚本返回,但前提是您不在另一个函数中。例如,这不起作用:

// Begin greasemonkey script
function a(){
    return; // Only returns from the function, not the script
}
// End greasemonkey script

是否有内置的Greasemonkey函数可以让我从脚本的任何地方停止执行脚本?

谢谢,

3 个答案:

答案 0 :(得分:4)

  

是否有内置的Greasemonkey函数可以让我从脚本的任何地方停止执行脚本?

没有。 These are the current Greasemonkey functions


你可以抛出一个例外,比如Anders的答案,但除了特殊情况外我不想例外。

总有旧经典,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


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

答案 1 :(得分:3)

是的,你可能会做类似的事情:

(function loop(){
    setTimeout(function(){
        if(parameter === "abort") {
            throw new Error("Stopped JavaScript.");
        }
        loop();
  }, 1000);
})(parameter);

您可以通过将variable参数的值设置为abort来简单地中止脚本,这可以是常规变量或Greasemonkey变量。如果它是Greasemonkey变量,那么您可以使用Firefox中的about:config直接通过浏览器修改它。

答案 2 :(得分:1)

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

// 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