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