20

私はGoogleマップにjQueryライブラリを使用していますが、最初にロードするGoogleスクリプトによって異なります。両方をバンドルに含めることができるようにしたいと思います。

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

これは機能していないようです(最初の文字列について不平を言う例外をスローします)。そして、その絶対URLは縮小/バンドルされることを意図していないため、これは機能しないはずだと言う人もいるかもしれません。

しかし、現在のアプローチは面倒です。依存関係が正しいことを確認する必要があり、それはさまざまな場所で発生します(バンドルコードの問題の半分、ビューの残りの半分)。

上記のような1ステップのソリューションがあると便利です。この点に関して何か選択肢はありますか?

アップデート:

CDNを解決策として使用することに関するコメントに対処するには、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サポートを使用しているため、そもそもそれがどのような意味を持つのかわかりません。したがって、それが私のユースケースとどのように矛盾するかはわかりません。

4

6 に答える 6

11

> = 1.1.2のバージョンを使用している場合、およびSystem.Web.OptimizationのURLをオーバーライドする新しい便利な方法があります。以下の例では、すべてのスクリプトとスタイルシートのベースURLとして使用するfromを取得しています。StylesScriptsCdnBaseUrlweb.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..."
        ));
    }
}

静的サイト(CDN)の最適化に関する詳細情報

于 2015-03-11T23:23:04.553 に答える
7

現在、バンドル内に依存しているjqueryのローカルコピーを含める必要があります。または、前述のようにスクリプトタグを管理する必要があります。この種の依存関係管理の問題を認識しており、codeplexでこの作業項目を使用して追跡している資産管理のカテゴリに分類されます。

于 2012-12-06T19:46:46.393 に答える
6

MVCチュートリアルに基づくと、CDNからバンドルを作成するための構文が正しくありません。そして、他の人が言っているように、あなたがbundles.UseCdn = true;プロパティを設定していることを確認してください。MVCサイトの例を使用すると、コードは次のことを反映している必要があります。

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&amp;libraries=places";
   bundles.Add(new ScriptBundle("myfoobundle", jqueryCdnPath).Include(
                "~/Scripts/jquery-{version}.js"));
}
于 2012-12-03T15:27:09.553 に答える
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")

コーディングをお楽しみください!!...

于 2014-04-25T11:03:36.057 に答える
1

私は提案されたようにこれを試しましたが、うまくいきませんでした:

string googleMapsApiCDN = "http://maps.google.com/maps/api/js?sensor=false&amp;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とgoogleのCDNスクリプトの両方が除外されています。

于 2014-01-30T16:21:30.533 に答える
0

CDNサポートを有効にして、絶対URLが機能するかどうかを確認してみましたか。

bundles.UseCdn = true;
于 2012-12-03T12:05:43.733 に答える