ensure({ html: "popup.html", javascript: "popup.js", css: "popup.css" }, function() { Popup.show("hello world"); } ); 在這段代碼中,ensure首先會(huì)確保popup " /> 伊人久久天堂,推倒美女总裁啪啪,xx顶级欧美熟妞xxhd

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

多瀏覽器兼容的動(dòng)態(tài)加載 JavaScript 與 CSS第1/2頁

在介紹ensure內(nèi)部的實(shí)現(xiàn)之前,讓我們先來看看其功能:

ensure({
html: "popup.html",
Javascript: "popup.js",
css: "popup.css"
}, function() {
Popup.show("hello world");
}
);
在這段代碼中,ensure首先會(huì)確保popup.html、popup.js、popup.css這3個(gè)文件的加載,如果都沒加載過ensure就會(huì)動(dòng)態(tài)加載它們;如果已經(jīng)加載過了,ensure不會(huì)再次加載。在確保這3個(gè)文件都加載后,ensure會(huì)調(diào)用后面的匿名函數(shù),也就是執(zhí)行Popup.show("hello world");。

接下來,就讓我們看看ensure是如何動(dòng)態(tài)加載JavaScript與CSS的。

加載JavaScript
在ensure當(dāng)中,加載JavaScript分兩種情況來執(zhí)行,也就是Safari與非Safari這兩種情況。

在IE、Firefox、Opera中加載JavaScript
在這三款瀏覽器中加載JavaScript,其實(shí)只需要?jiǎng)?chuàng)建一個(gè)script元素,把src指向要加載的URL,最后把script元素追加到head元素上,那就搞掂了。此項(xiàng)工作是在HttpLibrary.createScriptTag()中完成的。不過我們不僅僅要加載JavaScript,同時(shí)還需要知道它什么時(shí)候完成加載,這可以通過script元素的onload事件或onreadystatechange事件來實(shí)現(xiàn)。

在Safari中加載JavaScript
因?yàn)镾afari 2不支持onload或者onreadystatechange,所以只能手動(dòng)通過XHR把URL讀去過來,然后再手動(dòng)eval這段代碼,這就帶來了一個(gè)限制──只能加載本域的JavaScript文件。在ensure當(dāng)中,eval的工作是通過HttpLibrary.globalEval()來完成的。為了讓JavaScript代碼在全局(global)上下文中eval,ensure還是使用了創(chuàng)建script元素的方法,并將要eval的JavaScript置于其內(nèi),最后把script元素追加到head元素內(nèi)。

細(xì)心的人肯定要問,為什么HttpLibrary.globalEval()要如此設(shè)計(jì),而非直接window.eval或者eval.call。這是因?yàn)椋瑆indow.eval和eval.call都無法在IE6中實(shí)現(xiàn)和script標(biāo)簽加載JavaScript代碼一模一樣的效果,這兩種做法的eval在IE6下仍然不是在全局上下文中執(zhí)行的。搜索一下你就會(huì)發(fā)現(xiàn)一些相關(guān)的討論,例如jQuery就曾經(jīng)使用window.execScript()來完成此項(xiàng)任務(wù)。不過最終大家都發(fā)現(xiàn)添加script元素才是最好的跨瀏覽器解決方案,所以現(xiàn)在的jQuery和ensure都是如此實(shí)現(xiàn)的了。

加載CSS
相對(duì)于加載JavaScript而言,加載CSS就簡單多了,而且方法也是類似的:在head元素內(nèi)直接加入link元素就可以了。這也正是loadCSS()所完成的工作。

實(shí)際上,ensure沒有確保CSS完成加載后再執(zhí)行下去。這估計(jì)是因?yàn)闉g覽器都能夠在CSS加載完成后自動(dòng)應(yīng)用到頁面上,因此Omar AL Zabir就認(rèn)為CSS的加載順序是無關(guān)緊要的,不過假如CSS加載速度實(shí)在太慢,其實(shí)還是會(huì)影響顯示效果的。

在IE6中加載CSS
這次需要特別照顧的是IE6,而非Safari。IE6在往head元素添加link元素時(shí),必須在window的上下文中完成,因此添加link的函數(shù)通過call調(diào)用切換了上下文。

總結(jié)
實(shí)際上動(dòng)態(tài)加載JavaScript與CSS都并不難,在大多數(shù)情況下只需要向head元素追加對(duì)應(yīng)的子元素就可以了,只有Safari2和IE6這兩款古老的瀏覽器是需要特殊照顧的。
官方地址
ensure

JavaScript技術(shù)多瀏覽器兼容的動(dòng)態(tài)加載 JavaScript 與 CSS第1/2頁,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产麻豆精品传媒AV国产在线 | 亚洲偷偷自拍免费视频在线 | 国产精亚洲视频综合区 | 精品国产免费第一区二区 | 欧美三级黄色大片 | 免费在线观看黄色网址 | 粉色视频午夜网站入口 | 免费国产久久拍久久爱 | 国产又爽又黄又不遮挡视频 | 日本久久久久久久做爰片日本 | xart欧美一区在线播放 | 久久久WWW免费人成精品 | 帅哥男男GV在线1080P | 日本妈妈xxxx| 乳欲性高清在线 | 99C视频色欲在线 | 99久久免费精品 | 任你躁精品一区二区三区 | 亚洲香蕉网久久综合影院 | 偷拍亚洲制服另类无码专区 | 欧美性猛交AAA片免费观看 | 曰本女人牲交视频免费 | 花蝴蝶在线高清视频观看免费播放 | 国产日韩欧美有码在线视频 | 亚洲 视频 在线 国产 精品 | 极品网红液液酱粉嫩福利照子凌酱 | 国产九九熟女在线视频 | 在线超碰免费视频观看 | 白丝女仆被啪到深夜漫画 | 快播最新电影网站 | 回复术士人生重启在线观看 | 国产做国产爱免费视频 | 亚洲精品久久久久69影院 | 在线视频免费观看 | 免费看男人J放进女人J无遮掩 | 极品少妇高潮啪啪AV无码 | 亚洲看片无码免费视频 | 日本人六九视频 | 很黄很色60分钟在线观看 | 嫩草影院地址一地址二 | 久久这里只有精品国产99 |