我在FF56上的greasemonkey 3.17以及Vivaldi上的tampermonkey都有这个问题,我通过谷歌找不到任何关于这个问题的内容。
示例脚本:
// ==UserScript==
// @name stackoverflow.com
// @namespace siod87gbnwf87rnsfdkn
// @include https://stackoverflow.com/*
// @version 1
// ==/UserScript==
alert(1);
alert(2);
正如您所看到的那样,它非常简单,应该给出一个消息框,然后单击“确定”后再显示第二个消息框。这基本上工作正常,但现在问题是:
转到stackoverflow.com
使用鼠标中键两次在新标签中直接打开一个问题两次,以便第二个标签打开而另一个标签仍然加载
发生的情况是,两个标签都会显示弹出框" 1"正如预期的那样,但是当您从第一个选项卡上的框中单击“确定”时,脚本将暂停,直到您在第二个选项卡的弹出框上单击“确定”。在第二个选项卡上单击“确定”两次后,将触发第一个选项卡上的alert
。
为什么脚本不能彼此独立运行?这与alert
无关,我在使用更复杂的脚本时遇到了这个问题,但为了显示我的问题,警报的工作原理相同。
答案 0 :(得分:1)
为什么脚本不能彼此独立运行?
他们独立运行"从某种意义上说,他们不共享全球空间。但是,阻塞调用(例如alert
)由浏览器本身处理,并且ECMAScript规范中未指定排序。
一个"解决方案"不会使用阻塞调用,例如alert
。相反,如果您需要打印出值,请使用console.log
或console.info
。