19

私はGoogle Maps用の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を取得します。また、私はすでにjQueryなどのCDNサポートを使用しているので、そのことの意味がわからないので、のコンフリクトを私のユースケースと一緒に使用することはできません。

bundles.UseCdn = true; 
+0

最初の文字列についての例外は、何と言っていますか? 'UseCdn'をtrueに設定した場合、コードは機能します。 – robasta

+0

@rob 'UseCdn'を有効にしても動作しません – Odys

+0

aspバンドルが青いシート –

答えて

7

現在あなたがバンドルの内部に依存しているのjQueryのローカルコピーを含める必要があります、またはあなたが管理しなければなりませんあなたが言及するスクリプトタグ。私たちは、depedency管理この種の問題を認識して、それが示唆したように、私はこれを試してみました、それが動作しませんでした。このwork item on codeplex

+0

決定的な答えハオをありがとう!私はあなたたちがすぐにこれに回帰することを願っています。私が探していたのは、リモートスクリプトをバンドルに組み込む方法です(そのコードプレックスのworkitemで説明されているように複雑なものではありません)。 –

0

あなたはそれが絶対URLが動作することを可能にする場合は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")); 
} 
+1

質問に答えるかどうかわかりませんが、このようなオプションがあることを知っておくとよいでしょう。 – NVM

+1

助けてくれない – Odys

6

MVCのチュートリアルに基づいて、あなたの構文はCDNからバンドルを作成するための正しくない:

+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スクリプトがレンダリングされましたが、のGoogleからの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を適用します。次にビューで、あなたは

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

代わりの

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

あなたはSystem.Web.Optimization> = 1.1のバージョンを使用している場合は!! ...

+0

ありがとうDhrumil!バンドルされたjqueryファイルで非同期タグを使用しようとしていました。 –

8

コーディングお楽しみを記述する必要があります。2の場合、StylesScriptsのURLをオーバーライドする新しい便利な方法があります。以下の例では、私はすべてのスクリプトとスタイルシートのベースURLとして使用するweb.configからCdnBaseUrlをつかんでいます:

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

関連する問題