我为谷歌地图使用jQuery库,它取决于首先加载的谷歌脚本。我希望能够在这个包中包含这两个:
bundles.Add(new ScriptBundle("myfoobundle").Include(
"http://maps.googleapis.com/maps/api/js?sensor=false&libraries=places",
"~/scripts/jquery.fooplugin-{version}.js"
));
这似乎不起作用(抛出一个抱怨第一个字符串的异常)。有人可能会说这不起作用,因为绝对URL并不意味着缩小/捆绑。
但是当前的方法很麻烦,因为我需要确保依赖关系是正确的,并且发生在不同的地方(捆绑代码中的问题的一半,视图中的另一半)。
如上所述,拥有一步解决方案会很高兴。我在这方面有什么选择吗?
更新:
解决有关使用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支持,因此不确定如何与我的用例冲突。
答案 0 :(得分:9)
如果您使用的是System.Web.Optimization
> = 1.1.2版本,则有一种新的方便方法可以覆盖Styles
和Scripts
的网址。在下面的示例中,我从CdnBaseUrl
抓取web.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..."
));
}
}
答案 1 :(得分:7)
目前,您必须在捆绑包中包含您依赖的jquery的本地副本,或者您必须在提及时管理脚本标记。我们知道这种依赖管理问题,它属于资产管理类别,我们正在跟踪work item on codeplex
答案 2 :(得分: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"));
}
答案 3 :(得分:5)
如果只是在捆绑中获取绝对网址,那么你可以选择这个。
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")
享受编码!! ...
答案 4 :(得分: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 :(得分:0)
您是否尝试过启用CDN支持并查看是否允许绝对URL工作:
bundles.UseCdn = true;