打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
动态加载JS过程中如何判断JS加载完成
分类: javascript 2011-04-30 00:27 7820人阅读 评论(0) 收藏 举报

在正常的加载过程中,js文件的加载是同步的,也就是说在js加载的过程中,浏览器会阻塞接下来的内容的解析。这时候,动态加载便显得尤为重要了,由于它是异步加载,因此,它可以在后台自动下载,并不会妨碍其它内容的正常解析,由此,便可以提高页面首次加载的速度。

那么,既然js是异步加载,我们又该如何判断它是否加载完成呢?

 

在IE或一些基于IE内核的浏览器中(如Maxthon),它是通过script节点的readystatechange方法来判断的,而其它的一些浏览器中,往往是通过load事件来决定的,如下代码:

 

[javascript] view plaincopy
  1. function dynamicLoad()  
  2. {  
  3.    var _doc=document.getElementsByTagName('head')[0];  
  4.    var script=document.createElement('script');  
  5. script.setAttribute('type','text/javascript');  
  6. script.setAttribute('src','jquery-1.4.4.js');  
  7. script.onload=script.onreadystatechange=function(){  
  8.    if(!this.readyState||this.readyState=='loaded'||this.readyState=='complete'){  
  9.    alert('done');  
  10. }  
  11. script.onload=script.onreadystatechange=null;  
  12. }  
  13. }  
 

我们把该方法添加到body的load事件中,<body onload='dynamicLoad()'>,运行,会发现IE或Maxthon中,会弹出‘done’对话框,但是firefox或chrome中却完全没有反应,why?

这是因为,如果script节点没有添加到DOM树中,那么在chrome和firefox中是不会响应script的load事件的。但是IE中却可以。。修改后如下代码:

[javascript] view plaincopy
  1. function dynamicLoad()  
  2. {  
  3.    var _doc=document.getElementsByTagName('head')[0];  
  4.    var script=document.createElement('script');  
  5. script.setAttribute('type','text/javascript');  
  6. script.setAttribute('src','jquery-1.4.4.js');  
  7. _doc.appendChild(script);  
  8. script.onload=script.onreadystatechange=function(){  
  9.    if(!this.readyState||this.readyState=='loaded'||this.readyState=='complete'){  
  10.    alert('done');  
  11. }  
  12. script.onload=script.onreadystatechange=null;  
  13. }  
  14. }  
 

这时候,所有的浏览器都可以响应,你可以尝试一下~

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
YY in Limbo 混沌海狂想 ? DOM加载事件的终极解决方案
JavaScript的性能优化:加载和执行
html+js实现图片预加载(异步加载)
DOMContentLoaded与load的区别
在页面加载完后执行javascript代码 --网上download
页面加载事件
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服