ensure({ html: "popup.html", javascript: "popup.js", css: "popup.css" }, function() { Popup.show("hello world"); } ); 在這段代碼中,ensure首先會確保popup " /> av淘宝 在线观看,护士被老头边摸边吃奶的视频,亚洲乱亚洲乱妇13p

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

多瀏覽器兼容的動態加載 JavaScript 與 CSS第1/2頁

在介紹ensure內部的實現之前,讓我們先來看看其功能:

ensure({
html: "popup.html",
Javascript: "popup.js",
css: "popup.css"
}, function() {
Popup.show("hello world");
}
);
在這段代碼中,ensure首先會確保popup.html、popup.js、popup.css這3個文件的加載,如果都沒加載過ensure就會動態加載它們;如果已經加載過了,ensure不會再次加載。在確保這3個文件都加載后,ensure會調用后面的匿名函數,也就是執行Popup.show("hello world");。

接下來,就讓我們看看ensure是如何動態加載JavaScript與CSS的。

加載JavaScript
在ensure當中,加載JavaScript分兩種情況來執行,也就是Safari與非Safari這兩種情況。

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

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

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

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

實際上,ensure沒有確保CSS完成加載后再執行下去。這估計是因為瀏覽器都能夠在CSS加載完成后自動應用到頁面上,因此Omar AL Zabir就認為CSS的加載順序是無關緊要的,不過假如CSS加載速度實在太慢,其實還是會影響顯示效果的。

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

總結
實際上動態加載JavaScript與CSS都并不難,在大多數情況下只需要向head元素追加對應的子元素就可以了,只有Safari2和IE6這兩款古老的瀏覽器是需要特殊照顧的。
官方地址
ensure

JavaScript技術多瀏覽器兼容的動態加載 JavaScript 與 CSS第1/2頁,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 少妇两个奶头喷出奶水了怎么办 | 强开乳罩摸双乳吃奶视频 | 内射少妇三洞齐开 | 久久中文字幕亚洲 | 免费看欧美一级特黄a大片 免费看欧美xxx片 | 久久亚洲精品中文字幕 | 久久66热在线视频精品 | 精品一区二区三区在线成人 | 红桃传媒少妇人妻网站无码抽插 | 能看的黄页最新网站 | 亚洲中文字幕AV在天堂 | 囯产愉拍亚洲精品一区 | 最新果冻传媒在线观看免费版 | 成人在免费观看视频国产 | 又黄又猛又爽大片免费 | 伊人影院蕉久 | 好姑娘BD高清在线观看免费 | 美女视频黄a视频全免费网站色窝 | 亚洲AVAV天堂AV在线网爱情 | 野花香在线观看免费观看大全动漫 | 色狼亚洲色图 | 东北嫖妓对白粗口 | 日本真人啪啪试看30秒 | 被免费网站在线视频 | 色哟哟网站入口在线观看视频 | 亚洲一区二区三区免费看 | 亚洲狠狠网站色噜噜 | 亚洲人交性视频 | 国产制服丝袜91在线 | 麻豆国产96在线日韩麻豆 | 久久人妻AV一区二区软件 | 欧美丰满少妇久久无码精品 | 老司机福利视频一区在线播放 | 国产精品乱码色情一区二区视频 | 亚洲精品国产乱码AV在线观看 | 伊人久久青青 | 久久久精品日本一区二区三区 | 亚洲精品免费视频 | 高清国产激情视频在线观看 | 东北女人奶大毛多水多 | 漂亮美女2018完整版 |