Csharp/C#教程:用C#检测IE11分享


用C#检测IE11

在加载网页之前,我正在检测浏览器和版本以确定兼容性。

因此,如果浏览器小于IE7,则显示不兼容的消息。

在IE11中测试网页我的网页显示不兼容的消息。

我目前正在从以下位置获取浏览器名称:

var browser = Request.Browser.Browser; 

和版本

 var version = Request.Browser.Version; 

然后我检查浏览器是IE,版本> = 7。

我相信IE11的用户代理已经改变了。 那么使用C#检测浏览器是否> = IE7的最佳方法是什么?

编辑:

Request.Browser.Browser返回浏览器名称,例如IE。 Request.Browser.Version返回版本号。 我将这些添加到我拥有的BrowserVersion对象中,并将这些值与我支持的浏览器版本数组进行比较。 即

 private static List m_supportedBrowsers = new List() { new BrowserVersion("IE", 7), new BrowserVersion("Firefox", 3), new BrowserVersion("AppleMAC-Safari", 5), new BrowserVersion("Safari", 5) }; 

其中BrowserVersion只是一个具有2个字符串属性(名称和版本)的对象。

是的,用户代理已更改为:

 Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko 

这里最重要的部分是删除MSIE令牌和添加类似Gecko 。 这意味着如果Internet Explorer没有被识别为自身(因此旧的IE黑客将不会应用于它),则宁愿将其识别为Gecko类型的浏览器。 如果要将其标识为IE,则必须查找Trident令牌,并且版本来自rv令牌。

现在,只有在出于某种原因需要检查服务器端的用户代理时,才应考虑上述所有内容。 对于使用JavaScript回退,HTML5 polyfill等,您应该检查客户端代码是否支持给定的function(有些库可以帮助解决这个问题,例如Modernizr )。

我刚刚为Windows 7 Release Preview安装了IE11,我的代码也破了。 经过一些快速测试后,我注意到浏览器的字符串现在不同了。 它现在作为“InternetExplorer”而不是“IE”返回。

这段代码现在似乎对我有用。

 private void CheckIfUsingSupportedBrowser(HttpContext context) { bool isBrowserSupported = ((context.Request.Browser.Browser == "IE" || context.Request.Browser.Browser == "InternetExplorer") && context.Request.Browser.MajorVersion >= 7) || (context.Request.Browser.Browser == "Firefox" && context.Request.Browser.MajorVersion >= 13) || (context.Request.Browser.Browser == "AppleMAC-Safari" && context.Request.Browser.MajorVersion >= 5) || (context.Request.Browser.Browser == "Safari" && context.Request.Browser.MajorVersion >= 5) || (context.Request.Browser.Browser == "Chrome" && context.Request.Browser.MajorVersion >= 13); if (!isBrowserSupported) { Navigator.Navigate(PageKeys.SupportedBrowsers); } } 

我一直在试验IE11和MVC,结果certificateIE11将自己标识为Request.Browser.Browser =“Mozilla”和MajorVersion = 0.希望它有所帮助。

Request.Browser信息基于我的计算机上的浏览器定义文件。

C: WINDOWS Microsoft.NET 框架 v4.0.30319 CONFIG 浏览器

Internet Explorer的名称为ie.browser

我可以看到Internet Explorer 11及更高版本的处理方式与以前的所有版本完全不同。 对于以前的版本,有一个名为IE的基本定义,它又基于Mozilla。

  

所有以前的版本都有一个依赖链,可以追溯到IE 。 这是该链的一部分作为例子。

  

另一方面,Internet Explorer 11具有不同的祖先,并且直接基于Mozilla

  

IE以及因此Internet Explorer 11之前的所有版本(均未覆盖此值)使用以下定义作为browserfunction。

  

Internet Explorer 11及更高版本的用户如下。

  

总而言之,如果您对任何版本的Internet Explorer感兴趣,那么您需要使用类似于以下内容的东西。

 Request.Browser.Browser == "IE" || Request.Browser.Browser == "InternetExplorer" 

要标识特定版本,请引用Request.Browser.Version属性。 这是直接从浏览器传递的用户代理字符串填充的。 尽管如此,Internet Explorer 11及更高版本和之前的版本之间存在差异。

 //Versions prior to Internet Explorer 11.  //Internet Explorer 11 and later.  

版本是MSIE之前版本的位和rv:之后的位rv:用于Internet Explorer及更高版本。

最新版本的.Net Framework应该包含正确的浏览器定义文件,但看起来有些旧的可能需要一个修补程序来获取它。

更新:我通过上面的文本引用了Internet Explorer 11及更高版本。 以后的版本可能是Edge。 到目前为止,我还没有看到浏览器定义文件,但怀疑它会再次出现不同。

您使用的是哪个版本的.NET Framework? 根据我的分析,看起来小于4.5的版本无法将IE 11识别为Internet Explorer浏览器。

上述就是C#学习教程:用C#检测IE11分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/984847.html

(0)
上一篇 2021年12月20日
下一篇 2021年12月20日

精彩推荐