【问题标题】:Server side browser sniffing for IE 11 in .NET.NET 中 IE 11 的服务器端浏览器嗅探
【发布时间】:2013-12-31 07:43:28
【问题描述】:

在IE11发布之前,我一直在使用

context.Request.Browser.Browser == "IE" 

检测服务器端的IE浏览器。 由于 IE11 有用户代理更改,现在使用相同的技术不再起作用了。

context.Request.Browser.UserAgent 上的正则表达式是唯一的选择吗?

【问题讨论】:

  • 使用 IE11 访问您的页面并查看 Browser 对象的值? Browser.BrowserInternetExplorerBrowser.Version11.0。你有什么问题?
  • 它不再是 InternetExplorer,它说 'Mozilla'
  • 好的...我的 IE 11 显示 InternetExplorer。
  • 图片如下:imgur.com/Rbiv3rK
  • 微软已经更改了 UA 字符串,因为他们真的不希望你再使用“特殊情况”IE。如今,他们希望它获得与 Firefox/Chrome/Safari/etc 相同的代码。也就是说,我相信有一个针对 .net 服务器的修补程序可以解决此问题。也许是这个? support.microsoft.com/kb/2836939/en-us

标签: internet-explorer cross-browser browser-detection internet-explorer-11


【解决方案1】:

首先为什么需要浏览器嗅探。您真的不应该这样做,而是在客户端中进行特征检测并从那里进行调整。这是检查浏览器是否“切芥末”的方法

        <script>

        if (!('querySelector' in document)  //this should work in ie 9+
             || !('localStorage' in window)  //ie 8+
             || !('addEventListener' in window)  //ie 8 + (I think)
            || !('matchMedia' in window)) {//ie 10+

            //do your redirect here
        }

    </script>

说到这里,我建立了一种方法来检测它是否是过时的 IE。基本上它会检查浏览器是否为“IE”且主版本为 10。如果不是 10,则为 9、8、7。 IE 11 返回“Internet Explorer”,所以你知道它很好。

        public static bool IsOldIE()
    {

        var Browser = HttpContext.Current.Request.Browser;
        var isIE = Browser.Browser == "IE";

        if (!isIE)
        {
            return false;
        }

        return Browser.MajorVersion != 10;

    }

【讨论】:

  • 仅供参考 - 与其他浏览器相比,部分 PDF 渲染在 IE 中效果不佳。这是我必须检查浏览器的唯一原因。
  • 什么是部分 PDF 渲染?我从未遇到过打开 PDF 文档的问题,也从未听说过部分 PDF 渲染?当您打开 PDF 时,它会打开您的 PDF 客户端。
猜你喜欢
  • 2011-09-02
  • 2011-10-15
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 2015-06-05
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
相关资源
最近更新 更多