当加载到多个选项卡上时,userscript 会自行阻塞
userscript is blocking itself when loaded on more than one tab
我在 FF56 上的 greasemonkey 3.17 以及 Vivaldi 上的 tampermonkey 中都遇到了这个问题,我无法通过 google.
找到任何关于这个问题的信息
示例脚本:
// ==UserScript==
// @name whosebug.com
// @namespace siod87gbnwf87rnsfdkn
// @include https://whosebug.com/*
// @version 1
// ==/UserScript==
alert(1);
alert(2);
如您所见,它非常简单,应该给出一个消息框,然后在单击“确定”后给出第二个消息框。这基本上可以正常工作,但现在问题来了:
转到whosebug.com
使用鼠标中键两次直接在新选项卡中打开一个问题,这样第二个选项卡打开的同时另一个选项卡仍然加载
实际情况是,两个选项卡都会按预期显示弹出框“1”,但是当您在第一个选项卡的框上单击“确定”时,脚本将暂停,直到您在第二个选项卡的弹出框上单击“确定”。在第二个选项卡上单击两次确定后,将触发第一个选项卡上的 alert
。
为什么脚本不运行彼此独立?这与 alert
无关,我在使用更复杂的脚本时遇到了这个问题,但为了显示我的问题,警报的工作方式相同。
Why do the scripts not run independently from each other?
它们是 运行 "independently",因为它们不共享全局 space。但是,alert
等阻塞调用是由浏览器自己处理的,ECMAScript规范中并没有规定顺序。
一个 "solution" 是不使用阻塞调用,例如 alert
。相反,如果您需要打印出值,请使用 console.log
或 console.info
.
我在 FF56 上的 greasemonkey 3.17 以及 Vivaldi 上的 tampermonkey 中都遇到了这个问题,我无法通过 google.
找到任何关于这个问题的信息示例脚本:
// ==UserScript==
// @name whosebug.com
// @namespace siod87gbnwf87rnsfdkn
// @include https://whosebug.com/*
// @version 1
// ==/UserScript==
alert(1);
alert(2);
如您所见,它非常简单,应该给出一个消息框,然后在单击“确定”后给出第二个消息框。这基本上可以正常工作,但现在问题来了:
转到whosebug.com
使用鼠标中键两次直接在新选项卡中打开一个问题,这样第二个选项卡打开的同时另一个选项卡仍然加载
实际情况是,两个选项卡都会按预期显示弹出框“1”,但是当您在第一个选项卡的框上单击“确定”时,脚本将暂停,直到您在第二个选项卡的弹出框上单击“确定”。在第二个选项卡上单击两次确定后,将触发第一个选项卡上的 alert
。
为什么脚本不运行彼此独立?这与 alert
无关,我在使用更复杂的脚本时遇到了这个问题,但为了显示我的问题,警报的工作方式相同。
Why do the scripts not run independently from each other?
它们是 运行 "independently",因为它们不共享全局 space。但是,alert
等阻塞调用是由浏览器自己处理的,ECMAScript规范中并没有规定顺序。
一个 "solution" 是不使用阻塞调用,例如 alert
。相反,如果您需要打印出值,请使用 console.log
或 console.info
.