2012-01-03 108 views
8

我使用HTML5樣板和jQuery聲明兩次在HTML頁面是這樣的:包含兩個不同調用腳本的原因是什麼?

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.6.2.min.js"><\/script>')</script> 

背後有什麼,包括JavaScript文件這種方式的原因是什麼?

它似乎是唯一的原因是從本地服務器加載jQuery庫,如果它無法從Google CDN訪問。

+8

我不太確定你在問什麼。你已經給出了你的問題的答案... – lonesomeday 2012-01-03 18:15:34

+0

如果你沒有互聯網連接 – 2012-01-03 18:29:01

回答

8

他們的原因html5 Boilerplate包含腳本的方式是因爲它試圖「如果從Google CDN無法訪問,則從本地服務器加載jQuery庫」。 =)

2
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 

這將嘗試加載jQuery庫的協議更少版本

<script>window.jQuery || document.write('<script src="js/libs/jquery-1.6.2.min.js"><\/script>')</script> 

這將加載jQuery庫的本地版本,如果谷歌託管的版本沒有裝載正確(無法訪問,網站關閉等),因此檢查window.jQuery。如果window.jQuery不是true那麼它將執行document.write

1

是的,它檢查是否加載jQuery,如果沒有,然後從自己的服務器加載它。

//僅用於使其兼容HTTP和HTTPS。

+0

+1作爲澄清'//'我不知道! – enam 2012-01-03 18:45:35

0

原因是故障回覆。第一行代碼

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 

如您所說從Google CDN中提取jQuery庫。然後下面一行:

<script>window.jQuery || document.write('<script src="js/libs/jquery-1.6.2.min.js"><\/script>')</script> 

將驗證jQuery庫被加載(從谷歌CDN),如果沒有,那麼獲取的jQuery的本地副本。

2

從Google CDN中加載jQuery可能比從本地服務器加載jQuery要快得多,並且它可以被緩存,因此用戶可能已經從另一個網站獲得了它的緩存副本。

該檢查確保它已加載,否則如果失敗,請從本地服務器加載它。

0

如果你的問題是「爲什麼傳輸協議沒有指定?」,那麼答案是「它不必被指定」。這使您可以使用相同的腳本引用,不管連接是否使用安全套接字,也不會讓用戶收到有關加密/未加密內容的警告。

如果問題是「這是什麼線?:做|| window.jQuery文件撰寫(‘</SCRIPT>’)」,那麼答案是,我們使用的是(或多或少)三元語句來測試jQuery對象,如果未加載jQuery庫,它將評估爲「false」值,如果是,則此測試將觸發該語句的後半部分,從而導致加載本地jQuery。

HTH。