如何获取浏览器的“文档模式”?

11

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

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

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

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;
}
希望这些能有所帮助。

我可以设置文档模式吗?比如说,如果(document.documentMode == 8),那么可以将document.documentmode设置为任何值吗? - choudhury smrutiranjan parida
不幸的是,您无法使用JavaScript进行设置。但是,您可以使用x-ua-compatibility元标记来指定所需的IE模式。请注意,它只适用于IE的旧版本(例如,不适用于IE11+)。阅读此文以获取更多信息:http://msdn.microsoft.com/en-us/library/jj676915(v=vs.85).aspx - Sam Thornton
3
请注意,document.documentMode仅适用于IE8及以上版本,因此如果您需要针对本机IE7渲染,请进行额外的“特性检测”。 - WynandB

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返回5。对于非IE浏览器,它将返回undefined


是的,谢谢你的好建议,但我并没有JavaScript失败或某些缺失的函数,我只是在不同文档模式下有一些不同的函数行为。作为使用您的解决方案的另一种方式,也许您知道一些在“DocumentMode IE7”下无法工作的函数?如果我找到这样的函数,我可以使用它来识别文档模式。 - Mikhail
好的,“document.querySelector”在docmode IE7中不起作用。无论如何,找到了一个有用的IE文档属性,请查看更新后的答案。 - KooiInc
请注意,document.documentMode仅在IE8+中受支持,因此如果您需要针对本机IE7渲染,则需要进行额外的“特性检测”。 - WynandB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接