动态加载JS过程中如何判断JS加载完成
2014-03-14 04:17
218 查看
在正常的加载过程中,js文件的加载是同步的,也就是说在js加载的过程中,浏览器会阻塞接下来的内容的解析。这时候,动态加载便显得尤为重要了,由于它是异步加载,因此,它可以在后台自动下载,并不会妨碍其它内容的正常解析,由此,便可以提高页面首次加载的速度。
那么,既然js是异步加载,我们又该如何判断它是否加载完成呢?
在IE或一些基于IE内核的浏览器中(如Maxthon),它是通过script节点的readystatechange方法来判断的,而其它的一些浏览器中,往往是通过load事件来决定的,如下代码:
[javascript] view plaincopy
function dynamicLoad()
{
var _doc=document.getElementsByTagName('head')[0];
var script=document.createElement('script');
script.setAttribute('type','text/javascript');
script.setAttribute('src','jquery-1.4.4.js');
script.onload=script.onreadystatechange=function(){
if(!this.readyState||this.readyState=='loaded'||this.readyState=='complete'){
alert('done');
}
script.onload=script.onreadystatechange=null;
}
}
我们把该方法添加到body的load事件中,<body onload='dynamicLoad()'>,运行,会发现IE或Maxthon中,会弹出‘done’对话框,但是firefox或chrome中却完全没有反应,why?
这是因为,如果script节点没有添加到DOM树中,那么在chrome和firefox中是不会响应script的load事件的。但是IE中却可以。。修改后如下代码:
[javascript] view plaincopy
function dynamicLoad()
{
var _doc=document.getElementsByTagName('head')[0];
var script=document.createElement('script');
script.setAttribute('type','text/javascript');
script.setAttribute('src','jquery-1.4.4.js');
_doc.appendChild(script);
script.onload=script.onreadystatechange=function(){
if(!this.readyState||this.readyState=='loaded'||this.readyState=='complete'){
alert('done');
}
script.onload=script.onreadystatechange=null;
}
}
这时候,所有的浏览器都可以响应,你可以尝试一下~动态加载JS过程中如何判断JS加载完成
那么,既然js是异步加载,我们又该如何判断它是否加载完成呢?
在IE或一些基于IE内核的浏览器中(如Maxthon),它是通过script节点的readystatechange方法来判断的,而其它的一些浏览器中,往往是通过load事件来决定的,如下代码:
[javascript] view plaincopy
function dynamicLoad()
{
var _doc=document.getElementsByTagName('head')[0];
var script=document.createElement('script');
script.setAttribute('type','text/javascript');
script.setAttribute('src','jquery-1.4.4.js');
script.onload=script.onreadystatechange=function(){
if(!this.readyState||this.readyState=='loaded'||this.readyState=='complete'){
alert('done');
}
script.onload=script.onreadystatechange=null;
}
}
我们把该方法添加到body的load事件中,<body onload='dynamicLoad()'>,运行,会发现IE或Maxthon中,会弹出‘done’对话框,但是firefox或chrome中却完全没有反应,why?
这是因为,如果script节点没有添加到DOM树中,那么在chrome和firefox中是不会响应script的load事件的。但是IE中却可以。。修改后如下代码:
[javascript] view plaincopy
function dynamicLoad()
{
var _doc=document.getElementsByTagName('head')[0];
var script=document.createElement('script');
script.setAttribute('type','text/javascript');
script.setAttribute('src','jquery-1.4.4.js');
_doc.appendChild(script);
script.onload=script.onreadystatechange=function(){
if(!this.readyState||this.readyState=='loaded'||this.readyState=='complete'){
alert('done');
}
script.onload=script.onreadystatechange=null;
}
}
这时候,所有的浏览器都可以响应,你可以尝试一下~动态加载JS过程中如何判断JS加载完成
相关文章推荐
- 动态加载JS过程中如何判断JS加载完成
- 动态加载JS过程中如何判断JS加载完成
- 认识DOM和DOM加载过程以及如何让DOM加载完成后再执行js脚本文件
- [f]动态判断js加载完成
- 动态加载js并且判断是否加载完成!
- 如何判断js脚本加载完成
- 认识DOM和DOM加载过程以及如何让DOM加载完成后再执行js脚本文件
- js中动态加载js并且判断加载完成执行回调函数
- js判断图片加载完成
- Delphi中WebBrowser判断页面及JS是否加载完成
- js判断图片加载完成
- JS判断图片加载完成
- 用JS实现判断iframe是否加载完成
- js下判断 iframe 是否加载完成的完美方法
- 【转】js判断dom元素加载完成
- 关于JS判断图片是否加载完成且获取图片宽度的方法
- 如何判断WebBrowser中的页面加载完成
- 如何判断网页加载完成
- 关于JS中如何获取动态加载的对象小结
- 关于jQuery的getScript()实现动态js加载,原理,实现过程是怎么样的?