欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2008年09月03日 00:09:38   作者:  
Omar AL Zabir這位MVP總是喜歡搞些稀奇古怪同時(shí)又很實(shí)用的小東西,并且還十分值得參考。最近他就做了一個(gè)叫做ensure的小工具用于動(dòng)態(tài)加載JavaScript、CSS與HTML,而且IE、Firefox、Opera、Safari都支持了,那么我們就來看看ensure是如何做到動(dòng)態(tài)加載JavaScript與CSS的。
在介紹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)?,window.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

相關(guān)文章

  • 解決layui彈框失效的問題

    解決layui彈框失效的問題

    今天小編就為大家分享一篇解決layui彈框失效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JS發(fā)起HTTP請(qǐng)求的多種方式總結(jié)

    JS發(fā)起HTTP請(qǐng)求的多種方式總結(jié)

    這篇文章主要為大家詳細(xì)介紹了JavaScript發(fā)起HTTP請(qǐng)求的多種方式,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • JS 加入收藏夾的代碼(主流瀏覽器通用)

    JS 加入收藏夾的代碼(主流瀏覽器通用)

    所有瀏覽器通用的js添加收藏夾代碼,本文整理了多種方法實(shí)現(xiàn)加入收藏夾功能,下面為大家詳細(xì)介紹下實(shí)現(xiàn)代碼,感興趣的朋友可以參考下哈
    2013-05-05
  • 解決ie img標(biāo)簽內(nèi)存泄漏的問題

    解決ie img標(biāo)簽內(nèi)存泄漏的問題

    下面小編就為大家?guī)硪黄鉀Qie img標(biāo)簽內(nèi)存泄漏的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • JavaScript 私有成員分析

    JavaScript 私有成員分析

    JavaScript是世界上最受誤解的語言。有人認(rèn)為它缺少信息隱藏的屬性(封裝),因?yàn)镴avaScript對(duì)象不能擁有私有變量和函數(shù)。但這是誤解。JavaScript對(duì)象可以有私有成員。下面進(jìn)行說明。
    2009-01-01
  • 前端圖片懶加載的原理與3種實(shí)現(xiàn)方式舉例

    前端圖片懶加載的原理與3種實(shí)現(xiàn)方式舉例

    圖片懶加載又稱圖片延時(shí)加載、惰性加載,即在用戶需要使用圖片的時(shí)候加載,這樣可以減少請(qǐng)求,節(jié)省帶寬,提高頁面加載速度,相對(duì)的,也能減少服務(wù)器壓力,下面這篇文章主要給大家介紹了關(guān)于前端圖片懶加載的原理與3種實(shí)現(xiàn)方式的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • 詳解用webpack的CommonsChunkPlugin提取公共代碼的3種方式

    詳解用webpack的CommonsChunkPlugin提取公共代碼的3種方式

    本篇文章主要介紹了詳解用webpack的CommonsChunkPlugin提取公共代碼的3種方式,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-11-11
  • js中數(shù)組(Array)的排序(sort)注意事項(xiàng)說明

    js中數(shù)組(Array)的排序(sort)注意事項(xiàng)說明

    本篇文章主要是對(duì)js中數(shù)組(Array)的排序(sort)注意事項(xiàng)進(jìn)行了說明介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-01-01
  • JavaScript立即執(zhí)行函數(shù)的三種不同寫法

    JavaScript立即執(zhí)行函數(shù)的三種不同寫法

    這篇文章主要介紹了JavaScript立即執(zhí)行函數(shù)的三種不同寫法,需要的朋友可以參考下
    2014-09-09
  • JavaScript設(shè)計(jì)模式之迭代者模式詳情

    JavaScript設(shè)計(jì)模式之迭代者模式詳情

    這篇文章主要介紹了JavaScript設(shè)計(jì)模式之迭代者模式詳情,迭代器設(shè)計(jì)模式能夠可以讓我們更方便的且有規(guī)矩的進(jìn)行訪問復(fù)合數(shù)據(jù)的每一項(xiàng),也可以通過迭代器進(jìn)行完成一些流線式操作
    2022-06-06

最新評(píng)論