在正常的加载过程中,js的加载都是同步的,也就是在加载过程中,浏览器会阻塞接下来的内容的加载。这时候我们就要用到动态加载,动态加载是异步的,如果我们在后边要用到这个动态加载的js文件里的东西,就要保证这个文件加载完成后,再执行下面的内容。
如何判断js是否加载完成?(实现loadScript(url,callback)异步加载脚本,完成后执行回调函数,要求支持IE)
我们使用document的readyState属性:document.readyState
readyState 属性返回当前文档的状态。
该属性返回以下值:
- uninitialized - 还未开始载入
- loading - 载入中
- interactive - 已加载,文档与用户可以开始交互
- complete - 载入完成 (loaded)
原生JS:
function loadScript(url,callback){ 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{ //非IE script.onload=function(){callback();} }}
Jquery:使用 $.holdReady(true); $.getScript(); $.holdReady(false) 3个函数实现
$.holdReady(true); //hold住,等待a.js加载,后续代码不能执行$.getScript(‘a.js‘,function(){ $.holdReady(false); //释放,a.js加载完成,继续执行后续代码});
$.holdReady()函数表示 延迟加载。
时间: 2024-12-28 15:42:24