我正在一个大型项目中工作,我们必须确定用户是否在IE中使用兼容性视图 我正在使用此代码来执行此操作。
var agentStr = navigator.userAgent;
var mode = null;
if (agentStr.indexOf("Trident/5.0") > -1) {
if (agentStr.indexOf("MSIE 7.0") > -1)
mode = "IE9CV";
else
mode = "IE9";
} else if (agentStr.indexOf("Trident/4.0") > -1) {
if (agentStr.indexOf("MSIE 7.0") > -1)
mode = "IE8CV";
else
mode = "IE8";
} else
mode = "IE7";
工作得很好,问题是:
1 - 在INTRANET环境中,在客户端的浏览器中选中“在兼容性视图中显示Intranet站点”选项,我无能为力
2 - 脚本检测兼容性视图没有问题,但我不知道为什么,如果页面加载IE 9 兼容性视图<我收到的用户代理是下面的那个/强>
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
与 IE9
一起加载的页面非常相同Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
虽然我会收到
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
对于IE9兼容性视图。
当我强行使用IE9兼容性视图(正如预期的那样)时,我得到了最后的结果,但当它自动加载时,我得到的是与IE9标准发送给我的相同的用户代理。所以我无法确定一种方法来确定用户是否具有IE9标准视图或兼容性视图。
我不知道我是否清楚自己,但看起来像是一个很大的IE漏洞 我该怎么办?有谁也遇到过这个问题?
这是模拟情况的屏幕:
答案 0 :(得分:-1)
兼容模式几乎无处不在! :)
但是,尽量不要检测浏览器代理,因为它很容易被愚弄而且通常不可靠,而是尝试“功能检测”。
您可以使用一些库来执行此操作
编辑:如果您的要求是阻止用户在启用兼容性视图的情况下访问该站点,您可以使用<META> tag / HTTP header.
禁用该模式。有关更多信息,请参见此处。
http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx
http://blogs.msdn.com/b/ie/archive/2008/06/10/introducing-ie-emulateie7.aspx