在加载网页之前,我正在检测浏览器和版本以确定兼容性。
因此,如果浏览器小于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<BrowserVersion> m_supportedBrowsers = new List<BrowserVersion>()
{
new BrowserVersion("IE", 7),
new BrowserVersion("Firefox", 3),
new BrowserVersion("AppleMAC-Safari", 5),
new BrowserVersion("Safari", 5)
};
其中BrowserVersion只是一个具有2个字符串属性(名称和版本)的对象。
答案 0 :(得分:11)
我刚刚为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);
}
}
答案 1 :(得分:10)
是的,用户代理已更改为:
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等,您应该检查客户端代码是否支持给定的功能(有些库可以帮助解决这个问题,例如Modernizr)。
答案 2 :(得分:5)
我一直在试验IE11和MVC,结果证明IE11将自己标识为Request.Browser.Browser =“Mozilla”和MajorVersion = 0.希望它有所帮助。
答案 3 :(得分:1)
Request.Browser
信息基于我机器上的浏览器定义文件。
C:\的Windows \ Microsoft.NET \框架\ v4.0.30319 \配置\浏览器
Internet Explorer的名称为ie.browser
。
我可以看到Internet Explorer 11及更高版本的处理方式与以前的所有版本完全不同。对于以前的版本,有一个名为IE
的基本定义,它又基于Mozilla。
<browser id="IE" parentID="Mozilla">
所有以前的版本都有一个依赖关系链,可以追溯到IE
。以下是该链中的一部分。
<browser id="IE10Plus" parentID="IE6Plus">
另一方面,Internet Explorer 11具有不同的祖先,直接基于Mozilla
。
<browser id="InternetExplorer" parentID="Mozilla">
IE以及因此Internet Explorer 11之前的所有版本(均未覆盖此值)对browser
功能使用以下定义。
<capability name="browser" value="IE" />
Internet Explorer 11及更高版本的用户如下。
<capability name="browser" value="InternetExplorer" />
总而言之,如果您对任何版本的Internet Explorer感兴趣,那么您需要使用类似于以下内容的内容。
Request.Browser.Browser == "IE" || Request.Browser.Browser == "InternetExplorer"
要识别特定版本,您可以引用Request.Browser.Version
属性。这是直接从浏览器传递的用户代理字符串填充的。尽管如此,Internet Explorer 11及更高版本和之前的版本之间并没有区别。
//Versions prior to Internet Explorer 11.
<userAgent match="MSIE (?'version'(?'major'\d+)(\.(?'minor'\d+)?)(?'letters'\w*))(?'extra'[^)]*)" />
//Internet Explorer 11 and later.
<userAgent match="Trident/(?'layoutVersion'[7-9]|0*[1-9]\d+)(\.\d+)?;(.*;)?\s*rv:(?'version'(?'major'\d+)(\.(?'minor'\d+)))" />
版本是先前版本的MSIE
之后的位和Internet Explorer及更高版本的rv:
之后的位。
.Net Framework的最新版本应该包含正确的浏览器定义文件,但看起来有些较旧版本可能需要hotfix来获取它。
更新:我通过上面的文字引用了Internet Explorer 11及更高版本。后来的版本可能是Edge。到目前为止,我还没有看过浏览器定义文件,但怀疑它会再次出现不同。
答案 4 :(得分:0)
您使用的是哪个版本的.NET Framework?根据我的分析,看起来小于4.5的版本无法将IE 11识别为Internet Explorer浏览器。