分化在IE7兼容模式下IE7浏览器和浏览器分化在IE7兼容模式下IE7浏览器和浏览器(Differe

2019-05-13 13:56发布

我可以分化,如果客户端的浏览器IE7是或者例如IE9在IE7兼容模式? 我想弄清楚,如果我可以做我的网站上JS支票将承认两个不同的东西,并根据结果做不同的东西

  1. 该浏览器是IE7
  2. 该浏览器是在IE7兼容模式

我具备的首要条件,因为它几乎是到处说怎么办呀正常工作。 不知道这两者的第二个和/或组合。

Answer 1:

至少对于IE8和IE9,你可以检查是否navigator.userAgent有子Trident在里面。 一个IE8 + 总是有一个Trident在其用户代理,其中,一个IE7没有。 见这个答案 ,并在它的MSDN链接 。

IE10似乎棘手:据报道在低于该意见Trident并不总是表现为IE7仿真模式。 也许OS字符串(如Windows NT 6.2 )仍然会显示IE10,IE10是否将无法使用任何平台,IE7可以用。

另请注意,HTTP User-Agent头可能并不总是一致navigator.userAgent 。 这是至少与IE9的情况下,其具有兼容性模式上(发送IE7 User-Agent报头),而是检测像IE=Edge在响应( navigator.userAgent折回至IE9)。



Answer 2:

我不相信有一种方法来检测,如果用户的浏览器是兼容模式。 他们的用户代理字符串将通过他们的浏览器模式来确定,和它们的文件模式将通过任存在来确定x-ua-compatible元标记(或报头),或者可能由所使用的文档类型。

兼容模式是为了保护来自于对旧的和过时的功能或黑客依靠页面的现代浏览器的用户。 这不是真的你想测试反对的东西。 相反,写符合标准的代码,用于将通过浏览器在任一兼容模式,或非兼容模式来理解。

这里有不同的浏览器模式和文档模式的各种结果:

浏览器模式:IE10 COMPAT查看/文档模式:IE7标准

navigator.userAgent

"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; 
.NET4.0E; .NET4.0C; Media Center PC 6.0; .NET CLR 3.5.30729; 
.NET CLR 2.0.50727; .NET CLR 3.0.30729; BRI/2)" 

document.documentMode

7

浏览器模式:IE7 /文档模式:IE7标准

navigator.userAgent

"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; .NET4.0E; 
.NET4.0C; Media Center PC 6.0; .NET CLR 3.5.30729; .NET CLR 2.0.50727; 
.NET CLR 3.0.30729; BRI/2)"

document.documentMode

7

正如你所看到的,通过这两种方法是没有办法告诉如果用户是在compat的观点与否。

重写COMPAT查看列表

如果您的网站的兼容性视图列表上显示,您可以通过providng自己覆盖其建议的渲染选项x-ua-compatible标头:

<meta http-equiv="x-ua-compatible" content="IE=9" />

这迫使你的浏览器IE9成标准模式(无文档类型的评价)。 你可以使用IE=edge ,以迫使它进入可能的最新模式(在Internet Explorer 10,这将是IE 10分的标准),但不鼓励。 相反,将其设置为你与测试的最新模式。

如果x-ua-compatible标头被设置到IE10,但用户访问上较早的浏览器您的网页,最近的渲染引擎将被使用。 举例来说,如果用户访问你的页面,IE9,你的meta标签指示使用IE10浏览器,浏览器会退回到IE9标准模式。

需要注意的是IE=9导致浏览器进入IE9标准模式。 这并不一定会导致浏览器的行为,就好像是IE9。 如果您希望浏览器的行为,就好像是IE9,你将要使用的EmulateIE9内容:

<meta http-equiv="x-ua-compatible" content="IE=EmulateIE9" />

这会导致浏览器后备的DOCTYPE,如果它的存在,以确定该文件模式是否将成为标准,或怪癖。

欲了解更多信息,请参见定义文档兼容性 。



Answer 3:

对于任何人达到在谷歌这个线程,这里是另一种选择:

使用位于脚本http://www.quirksmode.org/js/detect.html ....

if (BrowserDetect.browser == 'Explorer')
{
    if (document.documentMode == 7 && BrowserDetect.version > 7)
    {
        // user is running IE in compatability mode
    }
}


Answer 4:

这对我的作品:

/**
 * Actual IE8-Browser running in IE8-Compat-Mode or IE7 Mode?
 */
MyUtils.isIE8CompatMode= function(){
    if($.browser.msie && navigator.userAgent.indexOf('MSIE 7.0')>=0){
        return true;
    }
    return false;
}

实际IE8浏览器有3个文献-模式(IE7,IE8&怪癖)和3-浏览器模式(IE7,IE8和IE8-兼容性)。 我们可以执行文件模式是IE8具有:

 <meta http-equiv="X-UA-Compatible" content="IE=8,chrome=1"/>

但是,我们不能强制浏览器模式,这是由浏览器的配置决定的。 例如:我们的一些客户有“呈现在兼容模式中的所有页面”,在他们的兼容性 - 视图 - 设置 - 对话框-checkbox检查。 如果是这样的话,我们也没有办法了。

请参阅本网站上的很受启发图:

- > 如何IE8确定兼容性模式

我们如何使用上述功能呢? 由于我们的页面中显示一些小问题时,在兼容模式下,我们需要告诉用户,为什么它寻找坏的,他能做些什么了。 所以我们用上面的功能告诉我们,如果有麻烦,然后呈现一个小警告用户。

在IE9和IE10的兼容性,模式我们的应用程序看起来不错,所以我们不需要它。 该响应可以被认为是这个问题的答案: 检测IE8兼容模式 ,其被标记为这一个的副本。 也许这可以帮助别人。



Answer 5:

这是一个相当防弹的支票,我为总部设在圣何塞的一家大型拍卖网站。

var userAgentString = navigator.userAgent;

if(/MSIE 7\.0/gi.test(userAgentString) && /Trident/gi.test(userAgentString)){
    // compatibility mode
    // .... code goes here ....
}


文章来源: Differentiate IE7 browser and browser in IE7 compatibility mode