判断js加载完成,(实现函数loadScript(url,callback)异步加载脚本,完成后执行回调函数,要求支持IE)
在“按需加载”的要求中,经常要判断当脚本加载完成时,要返回一个回调函数,那如何去判断一个脚本的加载完成呢?
可以对加载的JS对象使用onload来判断(js.onload), 此方法对Firefox2、Firefox3、Safari3.1+、Opera9.6+ 浏览器都能很好的支持,但 IE6、IE7 却不支持。
IE6、IE7可以使用js.onreadystatechange来跟踪每个状态的变化(一般为loading,loaded,interactive,complete),当返回的状态为loaded、complete表示加载完成,返回回调函数。
在IE下的标签script有个属性readyState,即script.readyState=true,表示加载完成
注意:1、在interactive状态下,用户可以参与互动
2、opera其实也支持js.onreadystatechange,但是他的状态和IE有很大的区别
原生js:
function loadScript(url,calback){
var script = document.createElement('script');
script.type = 'text/javascript';
script.async = 'async';
script.src = url;
document.body.appendChild(script);
if(script.readyState){
//IE下
script.onreadystatechange = function(){
if(script.readyState == 'complete' || script.readyState == 'loaded'){
script.onreadystatechange = null;
callback();
}
}
}else{
script.onload = function(){
callback();
}
}
}
或者用正则来表示
function loadScript(url,calback){
var script = document.createElement('script');
script.type = 'text/javascript';
script.async = 'async';
script.src = url;
var reg = /^(complete|loaded)$/
document.body.appendChild(script);
if(script.readyState){
//IE下
script.onreadystatechange = function(){
if( reg.test(script.readyState) ){
script.onreadystatechange = null;
callback();
}
}
}else{
script.onload = function(){
callback();
}
}
}
原文地址:https://blog.csdn.net/tangxiujiang
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。