(1) defer,只支持IE
(2) async:
(3) 创建script,插入到DOM中
/**
* 异步加载依赖的javascript文件
* src:script的路径
* callback:当外部的javascript文件被load的时候,执行的回调
*/
function loadAsyncScript(src, callback) {
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", src);
script.setAttribute("async", true);
script.setAttribute("defer", true);
head.appendChild(script);
if (script.readyState) {//ie
script.onreadystatechange = function() {
var state = this.readyState;
if (state === 'loaded' || state === 'complete') {
callback();
}
}
} else {//Others: Firefox, Safari, Chrome, and Opera
script.onload = function() {
callback();
}
}
}
写法2:
//异步加载js
function loadScript(url,callback){
var script = document.createElement("script");
script.type="text/javascript";
if(script.readyState){
script.onreadystatechange = function(){
if(script.readyState=="loaded"||script.readyState=="complete"){
script.onreadystatechange=null;
callback();
}
}
}else{
script.onload = function(){
callback();
}
}
script.src = url;
document.getElementsByTagName("head")[0].appendChild(script);
}
jq写法:
$.getScript("xxx.js", function(){
alert("xxx.js加载完毕")
});