11

我正在开发某种 JavaScript 库。我导致我有一些特定问题的问题:浏览器:IE8 / IE9 和文档模式:IE7 我找到了解决方案,但我不想在所有情况下都使用它,我只想在有的时候使用它上述情况。我知道我可以通过以下方式识别浏览器:

return navigator.userAgent.toLowerCase().indexOf('MSIE 8') > -1;

但是我以这种方式只识别浏览器版本而不是文档模式,并且当我拥有浏览器模式 IE8 和文档模式 IE 8 时,我不想使用我的解决方案。有没有办法获得页面文档模式在 IE 中?提前致谢。

4

2 回答 2

30

您可以使用它document.documentMode来准确返回 IE 使用的文档模式。

这意味着如果您将浏览器模式设置为 IE9,但将文档模式设置为 IE8,它将返回 document.documentMode == 8(而 userAgent 字符串仍将显示为 IE9)。如果您的 JS 曾经包含样式更改,这将特别有用,因为它是决定 IE 如何呈现页面的文档模式,而不是浏览器模式。兼容模式实际上只是更改了文档模式(通常为 IE7)。

在我需要的少数情况下,我只是使用这样的东西来区分 IE:

if (document.documentMode == 7) {
    doSomethingIn.IE7_only;
} else {
    doSomething.everwhereElse;
}

希望对一些人有所帮助。

于 2012-12-05T21:15:40.413 回答
1

我不知道如何检索文档模式1,但以更基本的方式解决问题可能是明智的。假设您想document.querySelector在脚本中使用。这将在 IE8/文档模式 IE7 标准中失败。因此,对自身存在的额外检查document.querySelector将是解决方案:

return ~navigator.userAgent.toLowerCase().indexOf('MSIE 8') 
       && document.querySelector; //=> IE8 and Docmode IE7 => false

1找到了一种检查文档模式的方法:使用document.documentMode. 它返回一个整数(对于文档模式 IE7 标准来说是 7),对于Quirks mode. 它将undefined适用于非 IE 浏览器。

于 2012-10-29T12:22:07.633 回答