我使用jQuery库的谷歌地图,而这取决于谷歌的脚本首先被加载。 我希望能够在束这样以包括:
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作为一种解决方案有关的意见:如果我指定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
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支持等,所以不知道该如何将我的使用情况下发生冲突 。
目前,你必须包括你是取决于束内的jQuery的本地副本,或者你会为你提到管理脚本标记。 我们都知道这种depedency管理问题的,它属于资产管理,我们与此跟踪类别下CodePlex上工作项目
如果您正在使用一个版本的System.Web.Optimization
> = 1.1.2,有重写的URL为一个新的便捷的方式Styles
和Scripts
。 在下面的例子中,我抓住一个CdnBaseUrl
从web.config
的基本URL所有脚本和样式表的使用方法:
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)优化更多信息
基于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&libraries=places";
bundles.Add(new ScriptBundle("myfoobundle", jqueryCdnPath).Include(
"~/Scripts/jquery-{version}.js"));
}
如果它仅仅是一个越来越捆绑绝对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")
享受编码!! ...
我想这是建议,并没有工作:
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的脚本, 都排除在外 。
您是否尝试过让CDN支持,看是否允许绝对URL的工作:
bundles.UseCdn = true;