注入 Javascript 似乎 运行 异步

Injected Javascript seems to run asynchronously

我正在制作一个 Greasemonkey 扩展的小书签版本,它将两个 <script> 标签附加到页面 body:第一个是一个较大的库,第二个调用该库中的一个函数.

通常,需要两次或更多次尝试(从不尝试一次,有时超过两次)才能正确触发脚本。 运行 注入库后直接从控制台运行的函数也可以。如果我检查我的错误日志,我会收到消息说我的注入方法还不存在——因此标题:尽管 JavaScript 应该是单线程的,但不知何故第二个方法标签是 运行 首先,在库完成加载之前。

缩小之前的小书签代码如下所示:

document.body.appendChild(document.createElement('script')).src = "https://my-site-address";

var scrN = document.createElement('script');
var txtN = document.createTextNode("main.Main().main(document.location.href)");
scrN.appendChild(txtN);

document.body.appendChild(scrN);

生成的html就是

<script src="https://my-site-address"></script>
<script>main.Main().main(document.location.href)</script>

使用script元素的load事件执行其中的函数:

var script = document.createElement("script");
script.onload = function() { main.Main().main(document.location.href); };
script.src = "https://my-site-address";

document.body.appendChild(script);