确定在兼容模式下呈现页面的原因?

时间:2010-06-23 17:14:48

标签: ie8-compatibility-mode

我有一个布局问题,这是由于在IE8上以兼容模式呈现包含页面。有没有办法检测是什么导致IE8进入特定页面的兼容模式?

根据Microsoft的文档,以下条件可能导致页面以兼容模式(http://msdn.microsoft.com/en-us/library/cc288325%28VS.85%29.aspx)呈现:

  • 页面启用了兼容性视图。
  • 页面加载到Intranet区域,Internet Explorer 8配置为兼容性视图中Intranet区域中的页面。
  • Internet Explorer 8配置为在兼容性视图中显示所有网站。
  • Internet Explorer 8配置为使用兼容性视图列表,该列表指定一组始终显示在兼容性视图中的网站。
  • 开发人员工具用于覆盖网页中指定的设置。
  • 网页遇到页面布局错误,Internet Explorer 8配置为通过在兼容性视图中重新打开页面自动从此类错误中恢复。

在查看页面后,我排除了第一种可能性,即它必须是页面上的页面布局错误。我想找到这个错误。

2 个答案:

答案 0 :(得分:4)

检查您是否有任何< meta>标签强制IE进入兼容模式。

如果您愿意,可以强制它呈现为IE8(完全符合CSS 2.1):

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

答案 1 :(得分:0)

假设您有一个带有ID compat-warning的隐藏元素:

Javascript w / jQuery:

$(function(){
    function showCompatWarning() {
        $('#compat-warning')
            .css('display','block')
            .css('height','auto')
            .show();
    }
    var tridentOffset = navigator.appVersion.indexOf('Trident/');
    if ( tridentOffset === -1 ) return;
    var jscriptVersion = 0;
    /*@cc_on @*/
    /*@if (@_jscript) jscriptVersion = @_jscript_version ; @*/;
    /*@end @*/
    var tridentVersion = parseInt(navigator.appVersion.substr(tridentOffset+8),10);
    var guessIEVersion = tridentVersion + 4;
    if (( document.documentMode && jscriptVersion && jscriptVersion < 10 && jscriptVersion !== document.documentMode ) ||
        ( document.compatMode && document.compatMode === 'BackCompat') ||
        ( document.documentMode && document.documentMode < 10 && document.documentMode != guessIEVersion ))
        showCompatWarning();
});

检测和警告,你对兼容地狱的第一道防线和最后一道防线。