注入的Javascript似乎是异步运行的

时间:2016-08-06 10:51:38

标签: javascript html javascript-injection

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

通常,需要两次或更多次尝试(从不一次,有时多于两次)才能使脚本正常触发。注入库后直接从控制台运行该函数也有效。如果我检查我的错误日志,我得到的信息是我的注入方法尚不存在 - 因此标题:尽管JavaScript应该是单线程的,但不知何故,第二个方法标记首先运行,库已完成加载。

在缩小之前,bookmarklet代码如下所示:

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>

1 个答案:

答案 0 :(得分:2)

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

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

document.body.appendChild(script);