加载到多个标签

时间:2017-11-16 00:33:18

标签: javascript greasemonkey userscripts tampermonkey

我在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无关,我在使用更复杂的脚本时遇到了这个问题,但为了显示我的问题,警报的工作原理相同。

1 个答案:

答案 0 :(得分:1)

  

为什么脚本不能彼此独立运行?

他们独立运行"从某种意义上说,他们不共享全球空间。但是,阻塞调用(例如alert)由浏览器本身处理,并且ECMAScript规范中未指定排序。

一个"解决方案"不会使用阻塞调用,例如alert。相反,如果您需要打印出值,请使用console.logconsole.info