Javascript 延迟脚本和DOM
我只需要在DOM就绪时运行脚本,因为脚本会重写某些标记的某些属性 目前我在Javascript 延迟脚本和DOM,javascript,deferred-loading,Javascript,Deferred Loading,我只需要在DOM就绪时运行脚本,因为脚本会重写某些标记的某些属性 目前我在DOMContentLoaded上使用document.addEventListener,或者如果document.attachEvent在onreadystatechange上不可用,则使用窗口.onload功能 我读过关于defer标记的文章,这些脚本应该在解析文档后执行 这是否意味着通过设置defer属性,我可以在DOM就绪时轻松执行脚本 有什么隐藏的东西我可能会错过吗 Opera、WebKit、Firefox和I
DOMContentLoaded
上使用document.addEventListener
,或者如果document.attachEvent
在onreadystatechange
上不可用,则使用窗口.onload
功能
我读过关于defer
标记的文章,这些脚本应该在解析文档后执行
- 这是否意味着通过设置
属性,我可以在DOM就绪时轻松执行脚本defer
- 有什么隐藏的东西我可能会错过吗
- Opera、WebKit、Firefox和IE的支持程度如何
编辑:我知道像JQuery这样的库,但我不能使用它们,因为我需要非常小的脚本,所以我需要一个低级解决方案。如果您愿意使用JQuery(),那么您可以使用:
$(document).ready(
function(){
//do something here, the DOM is ready!
}
);
有关详细信息,请访问
.ready函数将在DOM就绪后加载,我相信(尽管我可能弄错了),JQuery团队已经基本上解决了您(或我)可能错过的任何问题
虽然您可以在不增加JQuery开销的情况下解决这个问题,但根据我(新手)的经验,这种头痛不值得这么麻烦。此外,JQuery还有许多其他漂亮的工具。:) 正确实现
defer
属性将在DOM完成解析后自动运行脚本,因此脚本中的任何代码都不必在加载DOM时执行自己的逻辑。你可以阅读更多细节
但是,并非所有较旧的浏览器都支持defer
属性,因此您必须决定要支持哪些浏览器,以及对于任何不支持defer的浏览器,您的策略是什么。您可以在中读取浏览器实现的历史记录。在switcheroo中,它首先在IE中实现,然后在Firefox中实现,然后在Safari和Chrome中实现。从那篇文章中的日期/版本来看,除了Opera之外,现在依赖它似乎是相当安全的,但你必须深入到那篇文章中的细节,以确保它满足你的要求
下面的图表显示了浏览器对延迟的支持:
据我所知,
defer
的主要争议在于多个defer
脚本是否按顺序执行(它们应该按顺序执行),以及它们如何与使用async
的脚本交互。标准和实现现在已经明确,但并不总是如此。但是,如果您只有一个独立的defer
脚本,而您只关心在解析DOM后执行该脚本,那么您应该是安全的。jquery使用的事件侦听与我上面描述的类似。此外,我不希望使用jqery。确保在脚本运行之前加载文档的最简单方法是,只需将
标记放在
的末尾,就在
之前,然后不需要使用延迟加载或等待文档加载。这是一个选项吗?@jfriend00我需要我的脚本能够在任何地方。Opera不支持它(说)。我可以问你为什么要把它放在任何地方吗?谢谢你详细的回答!