19

我對Google地圖使用jQuery庫,它取決於首先加載的Google腳本。我希望能夠在束這樣以包括:ASP包中的絕對URL

bundles.Add(new ScriptBundle("myfoobundle").Include(
    "http://maps.googleapis.com/maps/api/js?sensor=false&libraries=places", 
    "~/scripts/jquery.fooplugin-{version}.js" 
)); 

這似乎並不工作(拋出一個異常抱怨的第一個字符串)。有人可能會說這不應該起作用,因爲絕對URL不會被縮小/捆綁。

但是目前的方法很麻煩,因爲我需要確保依賴性是正確的,並且發生在不同的地方(捆綁代碼中的一半,視圖中的另一半)。

如果您有上述的1步解決方案,我們感到非常高興。在這方面我有什麼選擇嗎?

UPDATE:

爲了解決使用CDN作爲一種解決方案有關的意見:如果我指定bundles.UseCdn = true它有沒有效果,我仍然得到異常The URL 'http://maps.googleapis.com/maps/api/js?sensor=false&libraries=places' is not valid. Only application relative URLs (~/url) are allowed。另外,我不確定這樣做的意義是什麼,因爲我已經使用CDN支持jQuery等,所以不確定與我的用例衝突

+0

什麼關於第一個字符串異常說呢?如果你將UseCdn設置爲true,你的代碼應該可以工作。 – robasta

+0

@rob它不適用於啓用UseCdn – Odys

+0

asp包是藍色表 –

回答

7

目前,你必須包括你是取決於束內的jQuery的本地副本,或者你將不得不管理腳本標籤,你提到。我們都知道這種depedency管理問題的,它屬於資產管理,我們與此work item on codeplex

+0

謝謝你的確切答案郝!我希望你們能很快回到這個位置。我一直在尋找的是一種將遠程腳本包含在一個包中的方法(沒有任何複雜的東西,就像在codeplex workitem中所解釋的那樣) –

0

您是否嘗試過讓CDN支持,看是否允許絕對URL工作:

bundles.UseCdn = true; 
+1

不知道它是否回答這些問題,但很高興知道有這樣的選項。 – NVM

+1

它沒有幫助 – Odys

6

基於MVC的教程,你的語法不正確創建從CDN捆綁。正如其他人所說,確保您擁有bundles.UseCdn = true;屬性集。使用上MVC site的例子 - 你的代碼應體現以下幾點:

public static void RegisterBundles(BundleCollection bundles) 
{ 
    bundles.UseCdn = true; //enable CDN support 
    //add link to jquery on the CDN 
    var jqueryCdnPath = "http://maps.googleapis.com/maps/api/js?sensor=false&libraries=places"; 
    bundles.Add(new ScriptBundle("myfoobundle", jqueryCdnPath).Include(
       "~/Scripts/jquery-{version}.js")); 
} 
+6

這段代碼將允許我從CDN加載jQuery,我已經這樣做了。我想要的是在適當的包中包含一些其他不相關的庫(Google Maps的東西)作爲絕對URL。 –

1

我嘗試這樣做跟蹤,建議的類別下,並沒有奏效:

string googleMapsApiCDN = "http://maps.google.com/maps/api/js?sensor=false&language=en"; 
     bundles.Add(new ScriptBundle("~/bundles/gmap3", googleMapsApiCDN).Include(
        "~/Scripts/GMap3/gmap3.min.js",   // GMap3 library 
        "~/Scripts/GMap3/mygmap3-about.js"  // Pops up and configures  
GMap3 on About page 
        )); 

的mygmap3-about.js腳本被呈現,但gmap3.min.js和谷歌的CDN腳本都排除了

5

如果這只是一個獲取捆綁絕對URL的問題,那麼你可以去這個。

public static class Extensions 
    { 
     public static IHtmlString RenderScript(this UrlHelper helper, params string[] paths) 
     { 
      string scripts = System.Web.Optimization.Scripts.Render(paths).ToHtmlString(); 
      string hostName = HttpContext.Current.Request.Url.Scheme + Uri.SchemeDelimiter + HttpContext.Current.Request.Url.Authority; 
      string replaced = Regex.Replace(scripts, "src=\"/", "src=\"" + hostName + "/", RegexOptions.Multiline | RegexOptions.IgnoreCase); 
      return new HtmlString(replaced); 
     } 
    } 

這將基本上從Scripts.Render採取bahvior,然後將絕對的URL應用到它。然後在視圖中,您有如果您使用的System.Web.Optimization> = 1.1版本寫的,而不是

@Url.RenderScript("~/bundles/jquery") 

@Scripts.Render("~/bundles/jquery") 

享受編碼!! ...

+0

感謝Dhrumil!當我試圖在綁定的jquery文件中使用異步標記時,這幫助了我。 –

8

。2,有一種覆蓋StylesScripts的url的新方便方法。在下面的例子中,我抓住一個CdnBaseUrlweb.config基礎網址用於所有腳本和樣式:

public class BundleConfig 
{ 
    private static readonly string BaseUrl = ConfigurationManager.AppSettings["CdnBaseUrl"]; 

    public static void RegisterBundles(BundleCollection bundles) 
    { 
     // This is the new hotness!! 
     Styles.DefaultTagFormat = "<link href=\"" + BaseUrl + "{0}\" rel=\"stylesheet\"/>"; 
     Scripts.DefaultTagFormat = "<script src=\"" + BaseUrl + "{0}\"></script>"; 

     bundles.Add(new ScriptBundle("~/bundles/js").Include(
      "Your scripts here..." 
     )); 

     bundles.Add(new StyleBundle("~/bundles/css").Include(
      "Your css files here..." 
     )); 
    } 
} 

More info on static site (CDN) optimization