【发布时间】:2017-04-08 02:34:28
【问题描述】:
如果您在 HTML 页面上使用纯脚本标记,则在下载并解析脚本之前,渲染会被阻止。为了避免这种情况,为了更快的页面显示,您可以添加“异步”属性,它告诉浏览器继续处理页面而不等待该脚本。但是,这本质上意味着引用该脚本中任何内容的其他 javascript 可能会崩溃,因为它需要的对象还不存在。
据我所知,没有可以绑定的 allScriptsLoaded 事件,所以我正在寻找模拟的方法。
我知道以下策略可以推迟运行其他代码,直到异步脚本可用:
- 对于单个脚本,使用它们的“onload”事件或属性。但是,我所知道的没有内置方法可以判断所有脚本何时已加载(如果有多个脚本)。
- 在附加到窗口的 onload 事件处理程序中运行所有相关代码。但是,它们也等待所有图像,而不仅仅是所有脚本,因此运行时间晚于理想情况。
- 使用加载器库加载所有脚本;那些通常提供在所有内容加载后运行的回调。缺点(除了需要一个库来执行此操作,它必须提前加载)是所有代码都必须包装在一个(通常是匿名的)函数中,然后传递给加载器库。这与创建一个在我的神话 allScriptsLoaded 触发时运行的函数相反。
我错过了什么,还是最先进的?
【问题讨论】:
-
我也想要一个答案!似乎没有办法在加载之前检查
<script async></script>元素以查看它是否已加载而不添加 onload 处理程序。 -
这可能包括您正在寻找的答案:stackoverflow.com/questions/950087/…