Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

SCRIPT标签的onload执行时机问题

  从IE9开始,SCRIPT标签就支持了onload事件,我们可以通过这个事件来处理执行完代码的SCRIPT标签。虽然知道这个事件是在代码执行完成后才会被执行,但具体又精确到何种程度呢?在现代浏览器上,这是事件是在脚本执行完后被立刻执行的,而IE9则不然。
  下面是一段测试代码 <script>
//Initialize the "inc" to zero.
var inc=0;
//Get the HEAD element from the document.
var head=document.documentElement.firstChild;
//Create and initialize SCRIPT elements in a loop,
//they will execute 10 times of the "inc++" code.
for(var i=0;i<10;i++){
  var script=document.createElement("script");
  script.src="data:text/javascript,inc++";
  head.insertBefore(script,head.firstChild);
  script.onload=function(){
    console.log(inc);
  };
};
</script>

  在现代浏览器上,onload事件可以确保在SCRIPT执行完成后马上被执行。所以它类似onafterscriptexecute的概念(onafterscriptexecute事件本身目前还没有任何浏览器支持)。而IE9上的测试就不是这个结果了:

  它的结果和使用IE独有的onreadystatechange的结果一样,浏览器只是产生一个简易的消息来触发这个事件,并不能确保在脚本执行完成后立即执行。目前我也没找到IE9-兼容的解决方案。当然,如果业务逻辑允许的话可以适当避开这个问题,比如像require.js一样对IE在执行过程中的元素使用readyState来判断。总之,要完美兼容的话还是很困难的,require.js本身也有很多解决不了问题。
网名:
34.203.213.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^