我正在制作一个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>
答案 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);