javascript - 当在多个选项卡上加载时,用户脚本会自行阻塞

标签 javascript greasemonkey userscripts tampermonkey

我在 FF56 上的 Greasemonkey 3.17 以及 Vivaldi 上的 tampermonkey 中都遇到了这个问题,并且我无法通过 google 找到有关此问题的任何信息。

示例脚本:

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

alert(1);
alert(2);

正如您所看到的,它非常简单,应该给出一个消息框,然后单击“确定”后出现第二个消息框。这基本上工作正常,但现在问题是:

  • 访问 stackoverflow.com

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

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

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

最佳答案

Why do the scripts not run independently from each other?

它们是“独立”运行的,因为它们不共享全局空间。但是,诸如 alert 之类的阻塞调用由浏览器本身处理,并且 ECMAScript 规范中未指定顺序。

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

关于javascript - 当在多个选项卡上加载时,用户脚本会自行阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47319649/

相关文章:

javascript - 在 JavaScript 中获取图像数据 URL?

javascript - 用户脚本通知适用于 Chrome 但不适用于 Firefox?

javascript - GreaseMonkey - Firefox Web 控制台未显示所有 javascript 错误

javascript - 阻止外部 JavaScript 文件

javascript - 带有弹出窗口的 Chrome 用户脚本中的 jQuery 队列?

javascript - 为什么 child 可以重定向父框架?

javascript - getSelection() 可以只应用于某个元素(而不是整个文档)吗?

javascript - 无法使用javaScript在HTML中打印特定字符串

javascript - 我可以通过请求直接从操作创建者内部访问 redux 调度吗?

javascript - 有没有办法使用 greasemonkey 在第 3 方站点上暂停(然后取消暂停)所有正在运行的 js 脚本?