用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之前的所有版本(均未覆盖此值)使用以下定义作为browser
function。
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