2013-03-14 46 views
34

我想用加載jQuery的CDN。我已閱讀this文章,這似乎應該是非常簡單的。在MVC腳本包中使用CDN。我錯過了什麼?

我的腳本包定義如下。

bundles.UseCdn = true; 
bundles.Add(new ScriptBundle("~/bundles/jquery", "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js").Include(
         "~/Scripts/jquery-{version}.js")); 

我包括在頁面上,如下所示:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <meta name="viewport" content="width=device-width" /> 
    <title>@ViewBag.Title</title> 
    @Styles.Render("~/Content/css") 
    @Scripts.Render("~/bundles/modernizr") 
</head> 
<body> 
    @RenderBody() 

    @Scripts.Render("~/bundles/jquery") 
    @RenderSection("scripts", required: false) 
</body> 
</html> 

但是,當我看螢火似乎jQuery是正在從本地主機加載的。 firebug inspection

我已經嘗試與realease和debug builds /。 我錯過了什麼?我認爲這應該是相當直接的。謝謝。

+1

退房此相關的,非常有趣POST HTTP: //www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification – Jaider 2014-01-19 17:35:07

回答

42

debug="false"模式下運行應用程序或使用BundleTable.EnableOptimizations = true;

+3

FWIW:我不確定有多少人知道這個屬性......我在這種情況下使用if(Debugger.IsAttached)通過「調試」腳本加載,並在「其他」中手動觸發BundleTable.EnableOptimizations = true,而不是依賴於web.config。如果您在使用IIS與Asp.net開發主機的環境中工作,這意味着如果您需要調試腳本,最糟糕的情況是您必須回去並記住運行IDE,然後刷新頁面才能獲取返回純文本詳細腳本。希望這可以幫助某人。 – 2014-01-06 15:29:53

+0

對不起,忘了提。這也確保了我不會忘記在部署時開啓優化或編譯正確的方式等。這通常不是生產中的問題,但它可能是QA站點等問題,您希望確保您的測試團隊是使用縮小版來確保穩定性。 – 2014-01-06 17:00:37

+1

'BundleTable.EnableOptimizations = true;'會一直** **縮小** – Liam 2015-01-16 16:33:55

7

確保您未處於調試模式。

bundles.Add(new ScriptBundle("~/bundles/jquery", "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js") 

設置BundleTable.EnableOptimizations = true; //如果你想使用調試模式

jQuery將來自CDN請求,而在釋放模式和jQuery的 調試版本將在調試模式在本地獲取。當 使用CDN時,如果CDN 請求失敗,則應該有回退機制。

如果CDN請求失敗,那麼你可以提供一個回調

<script type="text/javascript"> 
      if (typeof jQuery == 'undefined') { 
       var e = document.createElement('script'); 
       e.src = '@Url.Content("~/Scripts/jquery-1.7.1.js")'; 
       e.type = 'text/javascript'; 
       document.getElementsByTagName("head")[0].appendChild(e); 

      } 
     </script> 
+0

@downvoter發表評論。我編輯了答案。 – 2013-03-14 11:11:54

+2

他們可能已經低估了,因爲您的CDN備用將頭文件引用到頭中,這通常是不明智的。 – 2013-06-24 23:55:24

+1

而不是編寫JS代碼,您可以在BundleConfig類中指定CDN回退表達式,如下所示:jquery.CdnFallbackExpression =「window.jQuery」; – 2014-10-14 15:28:43

13

其實你可以使用最新版本的時候寫@RaviGadag他的方法更短的ASP.NET MVC。這樣,您就不必自己編寫回退的佈局:

public static void RegisterBundles(BundleCollection bundles) 
{ 

    bundles.UseCdn = true; 

    var jqueryCdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.3.min.js"; 
    var jqueryBundle = new ScriptBundle("~/bundles/jquery", jqueryCdnPath).Include("~/Scripts/jquery-{version}.min.js"); 
    jqueryBundle.CdnFallbackExpression = "window.jQuery"; 
    bundles.Add(jqueryBundle); 

    // ... 

    BundleTable.EnableOptimizations = true; 
} 

可用的jQuery版本在內容分發網絡(CDN): http://www.asp.net/ajax/cdn#jQuery_Releases_on_the_CDN_0

+2

它應該是「window.jQuery」,而不是「window.jquery」。 JavaScript區分大小寫。 – arni 2017-01-24 15:25:56

+0

感謝@arni,我在代碼中改變了它。 – juFo 2017-10-15 08:50:24