最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(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都支持了,那么我們就來(lái)看看ensure是如何做到動(dòng)態(tài)加載JavaScript與CSS的。
在介紹ensure內(nèi)部的實(shí)現(xiàn)之前,讓我們先來(lái)看看其功能:

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è)文件的加載,如果都沒(méi)加載過(guò)ensure就會(huì)動(dòng)態(tài)加載它們;如果已經(jīng)加載過(guò)了,ensure不會(huì)再次加載。在確保這3個(gè)文件都加載后,ensure會(huì)調(diào)用后面的匿名函數(shù),也就是執(zhí)行Popup.show("hello world");。

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • javascript實(shí)現(xiàn)的文字加密解密

    javascript實(shí)現(xiàn)的文字加密解密

    javascript實(shí)現(xiàn)的文字加密解密...
    2007-06-06
  • 前端知識(shí)點(diǎn)之Javascript選擇輸入框confirm用法

    前端知識(shí)點(diǎn)之Javascript選擇輸入框confirm用法

    這篇文章主要介紹了JavaScript中的confirm方法的基本用法、功能特點(diǎn)、注意事項(xiàng)及常見(jiàn)用途,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用js具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2025-02-02
  • canvas軌跡回放功能實(shí)現(xiàn)

    canvas軌跡回放功能實(shí)現(xiàn)

    這篇文章主要介紹了canvas軌跡回放功能實(shí)現(xiàn)過(guò)程以及相關(guān)的代碼整理,跟著小編一起學(xué)習(xí)下吧。
    2017-12-12
  • Webpack實(shí)現(xiàn)按需打包Lodash的幾種方法詳解

    Webpack實(shí)現(xiàn)按需打包Lodash的幾種方法詳解

    這篇文章主要給大家介紹了關(guān)于Webpack實(shí)現(xiàn)按需打包Lodash的幾種方法,文中介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-05-05
  • layui加載表格,綁定新增,編輯刪除,查看按鈕事件的例子

    layui加載表格,綁定新增,編輯刪除,查看按鈕事件的例子

    今天小編就為大家分享一篇layui加載表格,綁定新增,編輯刪除,查看按鈕事件的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • JS的反射問(wèn)題

    JS的反射問(wèn)題

    兩個(gè)等號(hào)直接比較值,但是類(lèi)型不能相互轉(zhuǎn)換的時(shí)候報(bào)錯(cuò)
    2010-04-04
  • JavaScript函數(shù)式編程實(shí)現(xiàn)介紹

    JavaScript函數(shù)式編程實(shí)現(xiàn)介紹

    函數(shù)式編程是一種編程范式,將整個(gè)程序都由函數(shù)調(diào)用以及函數(shù)組合構(gòu)成。 可以看成一條流水線(xiàn),數(shù)據(jù)可以不斷地從一個(gè)函數(shù)的輸出流入另一個(gè)函數(shù)的輸入,最后輸出結(jié)果
    2022-09-09
  • Bootstrap輪播插件簡(jiǎn)單使用方法介紹

    Bootstrap輪播插件簡(jiǎn)單使用方法介紹

    這篇文章主要為大家詳細(xì)介紹了Bootstrap輪播插件簡(jiǎn)單使用方法,介紹了使用bootstrap輪播插件的作用,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 詳解JavaScript中?.、??和??=的用法及使用場(chǎng)景

    詳解JavaScript中?.、??和??=的用法及使用場(chǎng)景

    這篇文章主要為大家詳細(xì)介紹了JavaScript中?.、??和??=的用法及使用場(chǎng)景,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • 動(dòng)態(tài)加載script文件的兩種方法

    動(dòng)態(tài)加載script文件的兩種方法

    第一種就是利用ajax方式,第二種是,動(dòng)態(tài)創(chuàng)建一個(gè)script標(biāo)簽,設(shè)置其src屬性,通過(guò)把script標(biāo)簽插入到頁(yè)面head來(lái)加載js,感興趣的朋友可以了解下
    2013-08-08

最新評(píng)論

石首市| 塔城市| 芜湖市| 南昌市| 清徐县| 松潘县| 广西| 保康县| 霍山县| 剑河县| 颍上县| 策勒县| 商丘市| 吴堡县| 太保市| 连云港市| 大城县| 佛教| 东明县| 庆元县| 怀仁县| 育儿| 迁安市| 阿城市| 冕宁县| 武穴市| 自贡市| 惠安县| 阳泉市| 鄂托克旗| 博罗县| 佛学| 通州市| 宁晋县| 灌云县| 德江县| 察雅县| 龙井市| 武夷山市| 宜宾市| 阿克苏市|