日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

ie下動態(tài)加態(tài)js文件的方法

這里只討論支持并行下載的瀏覽情況,大致分為兩種,一種是按加向DOM樹中加的順序執(zhí)行,另一種按下載完成的先后順序執(zhí)行;這樣如果js文件間有依賴關(guān)系的話,且是按下載順序執(zhí)行,且在沒有緩存的情況下就會報錯(通常的情況下第一次執(zhí)行會報錯,http返回狀態(tài)200,如果緩存未禁用,http狀態(tài)是304,就不會報錯了)
而ie就是按http下載完成的先后順序執(zhí)行js代碼的,首先看下面的代碼:
復(fù)制代碼 代碼如下:
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" lang="zh-CN"
head
meta http-equiv="Content-Type" content="text/html; charset=utf-8" /
titleModel/title
meta http-equiv="Content-language" content="zh-CN" /
/head
body
div id="page"
/div!-- Page end! --
script type="text/javascript"
//![CDATA[
var js = document.createElement(’script’);
js.type = ’text/javascript’;
js.src = https://www.rkxy.com.cn/dnjc/’alert.js’;
if(js.readyState){
js.onreadystatechange = function(){
if (js.readyState == "loaded" || js.readyState == "complete"){
alert(js.readyState);
document.getElementsByTagName(’head’)[0].appendChild(js);
}
};
}else{
document.getElementsByTagName(’head’)[0].appendChild(js);
js.onload = function(){
alert(’loaded not in ie!’);
};
}
//]]
/script
/body
/html

其中動態(tài)加載的alert.js文件中內(nèi)容為:alert(’in alert.js’);
經(jīng)過測試(ie8),可以發(fā)現(xiàn)彈出的內(nèi)容先后為:loaded、in alert.js、complete
查資料可得ie下向DOM中添加script時有onreadystatechange事件(其它瀏覽器有onload事件),而事件中js.readyState的狀態(tài)變化為:loading(下載中)、loaded(下載完成)、complete(代碼執(zhí)行完成)
從代碼中可以看出我是在事件中才向DOM中添加創(chuàng)建的scrip結(jié)點的……
因此可以得出ie在創(chuàng)建scrip結(jié)點并給src賦值時就開始有http下載了,這與其它瀏覽器完全不同(其它瀏覽器是要把script結(jié)點加到DOM中才會有http下載的),而把scrip結(jié)點向DOM樹中添加后才開始執(zhí)行代碼 。
有了這些結(jié)論我們就可以解決ie下并行下載順序執(zhí)行的問題了;有兩種方案:一種是邊下載邊順序執(zhí)行,另一種是全下載完再順序執(zhí)行 。
兩種各有好處,這里給出后一種情況的代碼(loader.js):
復(fù)制代碼 代碼如下:
/*
* Author: JaiHo
*/
(function(window){
var DOMLoader = (function(){
var DOMLoader = function(){
return new DOMLoader.prototype.init();
};
DOMLoader.prototype = {
jsList:[], js_all:0, loaded_js:0,
head:document.getElementsByTagName(’head’)[0],
init:function(){ },
create_node:function(src){
var js = document.createElement(’script’);
js.type = ’text/javascript’;
this.bindWait(js);
this.jsList[this.jsList.length] = js;
js.src = https://www.rkxy.com.cn/dnjc/src;
},
loadJS:function(list){
len = list.length;
for(var i=0; ilen; i){
if( i==len-1 )
this.js_all = len;
this.create_node(list[i]);
}
return this;
},
bindWait:function(js){
if(arguments.callee.caller!==this.create_node) return;
var that = this;
if(js.readyState){
js.onreadystatechange = function(){
if( js.readyState == ’loaded’ ){
that.loaded_js;
if( that.js_all == that.loaded_js ){
that.head.appendChild( that.jsList.shift() );
}
}
if ( js.readyState == "complete" ){
js.onreadystatechange = null;
if( that.jsList.length ){
that.head.appendChild( that.jsList.shift() );
}
}
};
}else{
js.onload = function(){
alert(’not in ie!’);
};
}
return this;
}
};
DOMLoader.prototype.init.prototype = DOMLoader.prototype;
return window.DOMLoader = DOMLoader;

推薦閱讀