Javascript中defer属性解析

来源:互联网 发布:java的编程思想 编辑:程序博客网 时间:2024/05/07 02:21

不同浏览器对于Javascript外部链接的加载顺序是不同的,尤其是在IE、FIrefox两者之间。为解决<script  src="xx.js"></script>中xx.js文件加载的不同,在script  src="xx.js" defer=“TRUE”></script>中加入defer属性,并设置该属性的值为TRUE。

IE中可以利用defer,defer的作用是把代码加载下来,并不立即执行,等文档加载完毕之后再执行,有点类似于window.onload,但是没有window.onload那样的局限性,可以重复使用,但是只在IE中有效。

在传统的浏览器其解析中,当HTML解析器遇到一个脚本,它必须按常规方法,终止对文档的解析并等待脚本执行。为了解决这个问题,HTML4标准定义了defer,通过defer来提示浏览器可以继续解析HTML文档,并延迟脚本执行。这种延迟在脚本从外部文件载入时非常有用,让浏览器不必等待外部文件全部载入之后才继续执行,能有效提高性能。IE是目前唯一支持defer属性的浏览器,但IE并没有正确的实行defer属性,因为延迟的脚本从事被延迟到文档结束,而不是只延迟到下一个非延迟脚本。这意味着,IE中延迟的脚本的执行顺序相当混乱,并且不能定义任何后面非延迟脚本必须的函数和变量。IE中所有defer的脚本执行时间应该是HTML文档树建立以后,window.onload之前。

目前只有Firefox和Opera确保执行顺序。

0 0