【问题标题】:How to bundle specific CSS according to browser version?如何根据浏览器版本捆绑特定的 CSS?
【发布时间】:2012-10-13 22:29:07
【问题描述】:

我正在使用 MVC4 StyleBundle 来捆绑一堆 CSS。只有 IE 9 或更低版本才需要一个 CSS。

在我的BundleConfig 类RegisterBundles 方法中,我有:

if (HttpContext.Current.Request.Browser.Browser.Trim().ToUpperInvariant().Equals("IE") && HttpContext.Current.Request.Browser.MajorVersion <= 9)
    cssBundle.Include("~/Content/ie.css");

但后来我收到了Request is not available in this context 错误。 RegisterBundles方法期间是不是不能检测到浏览器?

【问题讨论】:

  • 您是在 Global.asax 中创建这些捆绑包吗?这就是导致此错误的原因。我不认为捆绑包支持基于请求的捆绑包,而是一个全局捆绑包。
  • @Tejs,它的调用地址是Application_Start。
  • 是的,我不相信该框架提供了基于变体的捆绑包。这是一个全球性的全有或全无。如果你想为每个浏览器制作不同的包,你需要制作所有单独的包,然后在每个视图中写入对你想要的包的引用。

标签: c# asp.net-mvc-4 asp.net-optimization


【解决方案1】:

是的,Tejs 是正确的。 Bundles 是全局的,不能根据请求而变化,因为它们在第一次被引用后被缓存在服务器上。因此,您在上面所做的问题在于,取决于哪个浏览器首先点击请求,这将填充缓存并确定所有后续请求将收到什么,无论它们是否为 IE9。

【讨论】:

    【解决方案2】:

    你可以添加类似的东西:

    <script type="text/javascript">
        var domLib = '@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Zepto")';
        if (navigator.userAgent.indexOf('MSIE ') > -1) {
            domLib = '@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Jquery")';
        }
        document.write('<script src="' + domLib + '"><\/script>');
    </script>
    

    在本例中,我使用库 Zepto,如果是 Internet Explorer,则使用 Jquery。这对我来说可以。 皮埃尔

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      相关资源
      最近更新 更多