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

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

 更新時間:2011年03月03日 22:48:08   作者:  
在上一篇文章《如何確保JavaScript的執(zhí)行順序 - 之jQuery.html深度分析》中,我們揭示了jQuery.html函數(shù)之所以能在各種瀏覽器下保持動態(tài)JS順序執(zhí)行,其秘密在于 – 同步AJAX獲取外部JavaScript。
1. 引言
在上一篇文章《如何確保JavaScript的執(zhí)行順序 - 之jQuery.html深度分析》中,我們揭示了jQuery.html函數(shù)之所以能在各種瀏覽器下保持動態(tài)JS順序執(zhí)行,其秘密在于 – 同步AJAX獲取外部JavaScript。
我們先來簡單回顧下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>

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


下面進入本篇文章的主題:如果加載的JS是在其它域下面的,jQuery.html還能在各個瀏覽器下都能保證JS的順序執(zhí)行么?
2. 建立測試案例
1) 準(zhǔn)備兩個域名
為了測試,我在個人主頁(http://sanshi.me/)下面臨時創(chuàng)建了兩個子域名,分別是:
http://test.sanshi.me/
http://test1.sanshi.me/
2) 更新Demo頁面(test2_1.htm)
我會把test2_1.htm放在第一個子域名下,訪問地址為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腳本指向的是第二個域名下的(test1.sanshi.me)。
3) 在不同瀏覽器下測試

test2_1.htm

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

Firefox 3.6

IE 8

Chrome 10

Safari 4

Opera 11


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

看來我們在第二篇文章中看到的這個函數(shù)(evalScript)內(nèi)部并非真的通過同步AJAX來獲取數(shù)據(jù):


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

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


經(jīng)過分析,我們發(fā)現(xiàn)在動態(tài)加載不同域的JavaScript時,jQuery.html其實采用了在head中添加script標(biāo)簽的做法(不管是外部JS或者內(nèi)聯(lián)JS),這和我們在第一篇文章中提到的test3.htm是一模一樣的邏輯,這也驗證了我們的想法:

 

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

5.     后記

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

 

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

相關(guān)文章

  • jQuery選擇器之層次選擇器用法實例分析

    jQuery選擇器之層次選擇器用法實例分析

    這篇文章主要介紹了jQuery選擇器之層次選擇器用法,結(jié)合實例形式分析了jQuery后代元素選擇器、子元素選擇器、相鄰元素選擇器、兄弟元素選擇器等相關(guān)使用技巧,需要的朋友可以參考下
    2019-02-02
  • 使用jQuery操作Cookies的實現(xiàn)代碼

    使用jQuery操作Cookies的實現(xiàn)代碼

    Cookies是一種能夠讓網(wǎng)站服務(wù)器把少量數(shù)據(jù)儲存到客戶端的硬盤或內(nèi)存,或是從客戶端的硬盤讀取數(shù)據(jù)的一種技術(shù)
    2011-10-10
  • jQuery操作json常用方法示例

    jQuery操作json常用方法示例

    這篇文章主要介紹了jQuery操作json常用方法,結(jié)合實例形式分析了jQuery針對json的獲取、創(chuàng)建等常見操作技巧,需要的朋友可以參考下
    2017-01-01
  • jquery iframe操作詳細(xì)解析

    jquery iframe操作詳細(xì)解析

    這篇文章主要是對jquery中iframe的操作進行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-11-11
  • jQuery實現(xiàn)新消息閃爍標(biāo)題提示的方法

    jQuery實現(xiàn)新消息閃爍標(biāo)題提示的方法

    這篇文章主要介紹了jQuery實現(xiàn)新消息閃爍標(biāo)題提示的方法,實例分析了jQuery操作樣式的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • js實現(xiàn)表格篩選功能

    js實現(xiàn)表格篩選功能

    本文主要介紹了js實現(xiàn)表格篩選功能的代碼。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • jquery隔行換色效果實現(xiàn)方法

    jquery隔行換色效果實現(xiàn)方法

    這篇文章主要介紹了jquery隔行換色效果實現(xiàn)方法,涉及even及odd選擇器的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • 用jquery中插件dialog實現(xiàn)彈框效果實例代碼

    用jquery中插件dialog實現(xiàn)彈框效果實例代碼

    這篇文章介紹了jquery中插件dialog實現(xiàn)彈框效果實例代碼,有需要的朋友可以參考一下
    2013-11-11
  • jQuery仿移動端支付寶鍵盤的實現(xiàn)代碼

    jQuery仿移動端支付寶鍵盤的實現(xiàn)代碼

    最近做項目時碰到一個需求,就是在移動端支付頁面點擊支付按鈕彈出一個支付鍵盤,類似于支付寶的那種。項目只是單純的手機網(wǎng)站,所以這個功能由前端來實現(xiàn),下面小編給大家?guī)砹薺Query仿移動端支付寶鍵盤的實現(xiàn)代碼,需要的朋友參考下吧
    2018-08-08
  • jQuery實現(xiàn)圖片加載完成后改變圖片大小的方法

    jQuery實現(xiàn)圖片加載完成后改變圖片大小的方法

    這篇文章主要介紹了jQuery實現(xiàn)圖片加載完成后改變圖片大小的方法,結(jié)合實例形式分析了jQuery圖片樣式與頁面元素屬性動態(tài)操作的相關(guān)技巧,需要的朋友可以參考下
    2016-03-03

最新評論