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

如何確保JavaScript的執(zhí)行順序 之jQuery.html并非萬(wàn)能鑰匙

 更新時(shí)間:2011年03月03日 22:48:08   作者:  
在上一篇文章《如何確保JavaScript的執(zhí)行順序 - 之jQuery.html深度分析》中,我們揭示了jQuery.html函數(shù)之所以能在各種瀏覽器下保持動(dòng)態(tài)JS順序執(zhí)行,其秘密在于 – 同步AJAX獲取外部JavaScript。
1. 引言
在上一篇文章《如何確保JavaScript的執(zhí)行順序 - 之jQuery.html深度分析》中,我們揭示了jQuery.html函數(shù)之所以能在各種瀏覽器下保持動(dòng)態(tài)JS順序執(zhí)行,其秘密在于 – 同步AJAX獲取外部JavaScript。
我們先來(lái)簡(jiǎn)單回顧下HTML源代碼(test2.htm):
復(fù)制代碼 代碼如下:

<html>
<head>
<title></title>
<script src="js/jquery-1.4.4.js" type="text/javascript"></script>
<script>
$(function(){
$('#container').html('<script src="./service.ashx?file=js/jquery-ui.js&delay=2000" type="text\/javascript"><\/script>' + '<script>alert(typeof(jQuery.ui));<\/script>');
});
</script>
</head>
<body>
<div id="container">
</div>
</body>
</html>

順便一提的是,通過(guò)這種方式加載的外部JavaScript不可以在Firebug中調(diào)試,因?yàn)锳JAX結(jié)束后外部JavaScript的解析和內(nèi)聯(lián)JavaScript的解析是一樣的(都是調(diào)用jQuery.globalEval):


下面進(jìn)入本篇文章的主題:如果加載的JS是在其它域下面的,jQuery.html還能在各個(gè)瀏覽器下都能保證JS的順序執(zhí)行么?
2. 建立測(cè)試案例
1) 準(zhǔn)備兩個(gè)域名
為了測(cè)試,我在個(gè)人主頁(yè)(http://sanshi.me/)下面臨時(shí)創(chuàng)建了兩個(gè)子域名,分別是:
http://test.sanshi.me/
http://test1.sanshi.me/
2) 更新Demo頁(yè)面(test2_1.htm)
我會(huì)把test2_1.htm放在第一個(gè)子域名下,訪問(wèn)地址為http://test.sanshi.me/jsorder/test2_1.htm,其源代碼如下:
復(fù)制代碼 代碼如下:

<html>
<head>
<title></title>
<script src="js/jquery-1.4.4.js" type="text/javascript"></script>
<script>
$(function () {
$('#container').html('<script src="http://test1.sanshi.me/jsorder/service.ashx?file=js/jquery-ui.js&delay=2000" type="text\/javascript"><\/script>' + '<script>alert(typeof(jQuery.ui));<\/script>');
});
</script>
</head>
<body>
<div id="container">
</div>
</body>
</html>

可以看到,其中的jQueryUI腳本指向的是第二個(gè)域名下的(test1.sanshi.me)。
3) 在不同瀏覽器下測(cè)試

test2_1.htm

使用jQuery.html函數(shù)動(dòng)態(tài)加載其它域下的JavaScript

Firefox 3.6

IE 8

Chrome 10

Safari 4

Opera 11


3. jQuery.html并非萬(wàn)能鑰匙,那么
不知道大家是否還記得我們?cè)诘谝黄恼轮刑岬降膖est3.htm不,這個(gè)結(jié)果和那個(gè)示例的結(jié)果一模一樣,jQuery.html也并非萬(wàn)能鑰匙。這不禁讓我們懷疑這兩個(gè)示例的內(nèi)部邏輯是否一樣?
但是第二篇文章不是明明白白告訴我們,jQuery.html使用的是同步AJAX的機(jī)制來(lái)加載外部JS的么?等等。。。。。。
大家有沒(méi)有從上面的分析中發(fā)現(xiàn)問(wèn)題,AJAX來(lái)加載其他域的資源,這不是明擺著違背了大名鼎鼎的同源策略(Same Origin Policy)了么?所以jQuery不可能這么實(shí)現(xiàn),我們來(lái)看看jQuery.ajax文檔是怎么說(shuō)的:

看來(lái)我們?cè)诘诙恼轮锌吹降倪@個(gè)函數(shù)(evalScript)內(nèi)部并非真的通過(guò)同步AJAX來(lái)獲取數(shù)據(jù):


4. 深入jQuery.ajax函數(shù),看看怎么加載不同域下的JS文件

注釋已經(jīng)寫的很清楚了,如果是通過(guò)GET方式請(qǐng)求JavaScript文件,并且這個(gè)文件是在其他域下面的(remote),那么就通過(guò)在head中添加script標(biāo)簽來(lái)處理,而不是走AJAX的流程。所以在這個(gè)條件分支結(jié)束的時(shí)候,直接從函數(shù)體返回:


經(jīng)過(guò)分析,我們發(fā)現(xiàn)在動(dòng)態(tài)加載不同域的JavaScript時(shí),jQuery.html其實(shí)采用了在head中添加script標(biāo)簽的做法(不管是外部JS或者內(nèi)聯(lián)JS),這和我們?cè)诘谝黄恼轮刑岬降?/SPAN>test3.htm是一模一樣的邏輯,這也驗(yàn)證了我們的想法:

 

由此可見(jiàn),如果想兼容CDN加速靜態(tài)資源的情況,還必須使用第一篇文章中提到的“方案一,如何在動(dòng)態(tài)添加script標(biāo)簽時(shí)確保執(zhí)行順序”。

5.     后記

本來(lái)這個(gè)系列的文章到這就應(yīng)該結(jié)束了。不過(guò)在我測(cè)試jQuery1.5.1后,居然發(fā)現(xiàn)和我用的jQuery1.4.4是有差異的,早就聽說(shuō)jQuery1.5.1對(duì)AJAX部分進(jìn)行了重構(gòu),沒(méi)想到還真的對(duì)我們的代碼有點(diǎn)影響。

 

具體是哪方面的影響,請(qǐng)看下一篇文章:如何確保JavaScript的執(zhí)行順序 - jQuery1.5.1jQuery1.4.4的細(xì)微差異。待續(xù)。。。

相關(guān)文章

  • jQuery訪問(wèn)json文件中數(shù)據(jù)的方法示例

    jQuery訪問(wèn)json文件中數(shù)據(jù)的方法示例

    這篇文章主要介紹了jQuery訪問(wèn)json文件中數(shù)據(jù)的方法,結(jié)合實(shí)力形式分析了jQuery事件響應(yīng)及json文件的加載、讀取、遍歷等相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • jQuery的操作屬性詳解

    jQuery的操作屬性詳解

    這篇文章主要為大家介紹了jQuery的操作屬性,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • jquery對(duì)元素拖動(dòng)排序示例

    jquery對(duì)元素拖動(dòng)排序示例

    對(duì)元素進(jìn)行拖動(dòng)排序的實(shí)現(xiàn)方法有很多,在本文為大家介紹下使用jquery來(lái)完成這個(gè)工作,希望對(duì)大家有所幫助
    2014-01-01
  • JQuery+Ajax無(wú)刷新分頁(yè)的實(shí)例代碼

    JQuery+Ajax無(wú)刷新分頁(yè)的實(shí)例代碼

    本篇文章主要是對(duì)JQuery+Ajax無(wú)刷新分頁(yè)的實(shí)例代碼進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2014-02-02
  • jQuery簡(jiǎn)單實(shí)現(xiàn)圖片預(yù)加載

    jQuery簡(jiǎn)單實(shí)現(xiàn)圖片預(yù)加載

    我們?cè)谧鼍W(wǎng)站的時(shí)候經(jīng)常會(huì)遇到這樣的問(wèn)題:一個(gè)頁(yè)面有大量的圖片導(dǎo)致頁(yè)面加載速度緩慢,經(jīng)常會(huì)出現(xiàn)一個(gè)白頁(yè)用戶體驗(yàn)很不好。那么如何解決這個(gè)問(wèn)題呢?下面我來(lái)介紹一種在實(shí)際應(yīng)用中經(jīng)常會(huì)使用到的js預(yù)加載的方法。
    2015-04-04
  • 使用jQuery實(shí)現(xiàn)頁(yè)面定時(shí)彈出廣告效果

    使用jQuery實(shí)現(xiàn)頁(yè)面定時(shí)彈出廣告效果

    這篇文章主要介紹了使用jQuery實(shí)現(xiàn)頁(yè)面定時(shí)彈出廣告效果,需要的朋友可以參考下
    2017-08-08
  • jQuery表格的維護(hù)和刪除操作

    jQuery表格的維護(hù)和刪除操作

    可以利用js函數(shù)來(lái)實(shí)現(xiàn)對(duì)表格的維護(hù)和刪除,相對(duì)于JavaScript簡(jiǎn)單方便,下面通過(guò)實(shí)例代碼給大家介紹下jQuery表格的維護(hù)和刪除操作,一起通過(guò)本文學(xué)習(xí)吧
    2017-02-02
  • Jquery實(shí)現(xiàn)自定義彈窗示例

    Jquery實(shí)現(xiàn)自定義彈窗示例

    使用javascript自帶的提示對(duì)話框,不怎么美觀,如果使用自定義的,那么在樣式上就會(huì)有更多的控制權(quán)了,下面為大家分享下Jquery自定義的彈窗
    2014-03-03
  • jQuery.cookie.js實(shí)現(xiàn)記錄最近瀏覽過(guò)的商品功能示例

    jQuery.cookie.js實(shí)現(xiàn)記錄最近瀏覽過(guò)的商品功能示例

    這篇文章主要介紹了jQuery.cookie.js實(shí)現(xiàn)記錄最近瀏覽過(guò)的商品功能,結(jié)合實(shí)例形式分析了基于jQuery.cookie.js插件創(chuàng)建cookie及保存瀏覽記錄的操作技巧,需要的朋友可以參考下
    2017-01-01
  • 15款jQuery分布引導(dǎo)插件分享

    15款jQuery分布引導(dǎo)插件分享

    這篇文章主要給大家分享了15款jQuery分布引導(dǎo)插件,需要的朋友可以參考下
    2015-02-02

最新評(píng)論

黔江区| 行唐县| 镇坪县| 阆中市| 彰武县| 洛宁县| 祁东县| 南江县| 南开区| 东海县| 宜良县| 石河子市| 自治县| 秀山| 蒲城县| 库尔勒市| 东平县| 大田县| 竹溪县| 东莞市| 德州市| 定襄县| 新竹县| 东平县| 左权县| 灵石县| 长寿区| 绍兴县| 建昌县| 革吉县| 宜宾县| 南康市| 偏关县| 工布江达县| 海原县| 龙川县| 会昌县| 曲水县| 通城县| 刚察县| 长沙市|