gpt4 book ai didi

javascript - 如何检测您的 Javascript 是同步包含还是异步包含

转载 作者:搜寻专家 更新时间:2023-11-01 04:33:27 26 4
gpt4 key购买 nike

我正在尝试检测当前正在执行的 Javascript 文件是否被同步包含(通过常规脚本标记)

<script src="myscript.js"></script>

或者通过以编程方式将脚本元素异步插入到 DOM 中,例如

var script = document.createElement('script')
script.src = 'myscript.js'
document.body.appendChild(script)

因此是否可以使用 document.write。我想出了一个疯狂的解决方案来测试 document.write 是否有效,请参阅 this gist .

基本上,它通过使用 document.write 写出一个元素来工作——我选择了一个空的脚本标签。然后它查询 DOM 以确定该脚本元素是否已成功写出。如果是 - 脚本必须同步包含,如果不是 - 它是异步包含的。

此解决方案适用于我目前测试过的所有浏览器(所有主要浏览器,包括 IE7+),Opera 除外。

问题是:是否有更好的解决方案?

注意:我也试过检查 document.readyState,但这在 IE 中似乎没有帮助。

另请注意:我不需要讲授 document.write 是邪恶的。我知道。

更新:事实证明,除了不能在 Opera 上工作之外,我的技术在 IE 和其他浏览器的某些情况下也不可靠 - document.write 可能会或可能不会工作,具体取决于计时或缓存方案。 spec似乎说了这么多。

最佳答案

这很糟糕,但您可以重新定义文档函数并编写您自己的函数。也许是这样的:

var oldAppendChild = document.body.appendChild;

document.body.appendChild = function(child) {
//examine if child is a script element, do stuff with it if it is
//finally do what the original function did and:
oldAppendChild(child);
}

当然,您需要处理所有不同的浏览器怪癖以及可以将脚本元素添加到页面的所有不同方式,但它是您所描述内容的替代方案

关于javascript - 如何检测您的 Javascript 是同步包含还是异步包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9407199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com