Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.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_Greasemonkey_Userscripts_Tampermonkey - Fatal编程技术网

Javascript 当加载到多个选项卡上时,userscript正在阻止自身

Javascript 当加载到多个选项卡上时,userscript正在阻止自身,javascript,greasemonkey,userscripts,tampermonkey,Javascript,Greasemonkey,Userscripts,Tampermonkey,我对FF56上的greasemonkey 3.17以及Vivaldi上的tampermonkey都有这个问题,我无法通过谷歌找到关于这个问题的任何信息 示例脚本: // ==UserScript== // @name stackoverflow.com // @namespace siod87gbnwf87rnsfdkn // @include https://stackoverflow.com/* // @version 1 // ==/UserScript=

我对FF56上的greasemonkey 3.17以及Vivaldi上的tampermonkey都有这个问题,我无法通过谷歌找到关于这个问题的任何信息

示例脚本:

// ==UserScript==
// @name        stackoverflow.com
// @namespace   siod87gbnwf87rnsfdkn
// @include     https://stackoverflow.com/*
// @version     1
// ==/UserScript==

alert(1);
alert(2);
正如您所看到的,它非常简单,应该会给出一个消息框,单击OK后会出现第二个消息框。这基本上可以正常工作,但现在要解决问题:

请访问stackoverflow.com

使用鼠标中键两次直接在新选项卡中打开问题两次,以便第二个选项卡打开,而另一个选项卡仍在加载

发生的情况是,两个选项卡都将按预期显示PopuBox 1,但当您在第一个选项卡的框上单击“确定”时,脚本将暂停,直到您在第二个选项卡的PopuBox上单击“确定”。在第二个选项卡上单击“确定”两次后,将触发第一个选项卡上的警报

为什么脚本不能彼此独立运行?这与alert无关,我在一个更复杂的脚本中遇到了这个问题,但是为了显示我的问题,alert的工作原理是一样的

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

它们是独立运行的,因为它们不共享全局空间。但是,阻止调用(如警报)由浏览器本身处理,并且ECMAScript规范中未指定顺序


一种解决方案是不使用诸如alert之类的阻塞调用。相反,如果需要打印值,请使用console.log或console.info。

Yes警报只是一个示例。我真正的脚本在快速连续打开多个链接时出现问题,然后某些内容将无法运行。但我只是尝试使用console.log来检查greasemonkey是否在每个新打开的选项卡上运行脚本,事实上确实如此。所以错误一定在我的真实脚本中的某个地方,尽管我不认为我使用了任何阻塞。我得再看看。谢谢你澄清我的问题,为什么这个例子没有运行。