具体哪些因素会导致IE8触发兼容模式?

时间:2012-01-25 17:07:07

标签: html internet-explorer-8 ie8-compatibility-mode

我有一个应用程序,在某些情况下会导致IE8弹出兼容性消息并在compat模式下重新加载:

  

显示问题导致Internet Explorer刷新网页   使用兼容性视图

这是罕见的,据我所知,由于元标记不会发生。它发生在对改变DOM的用户操作的响应中。这与以下问题相同:https://superuser.com/questions/215281/how-do-i-stop-i-e-jumping-into-compatability-view,但我的问题是:什么类型的事情会导致这种情况,作为修复它的辅助手段。

换句话说,请参阅此网站thesitewizard.com,其中IE8中兼容模式的第三个原因描述为:

  

,有时,还有其他一些不可思议的,无证件的理由   被验证为符合标准的页面(或者,至少它确实符合标准)   这在候选人1)中。

问题是:什么是不可思议的,没有证据的原因?

4 个答案:

答案 0 :(得分:7)

经过长时间的调试会议(使用旧学校警报来查明失败的地方),这个看似天真的dom操纵线是罪魁祸首:

document.getElementById("literal"+varValue).style.display = "none";

这里没有错误,并且显然找到了元素(即,这不是花园品种空指针)。

这是一个大型应用程序,围绕此代码进行了大量工作。我把它切换到以下,这显然阻止了这个问题:

setTimeout(function(){
           var layoutEl = document.getElementById("literal"+varValue);
           if (layoutEl)
               layoutEl.style.display = "none";
       },10)

答案 1 :(得分:5)

以下内容来自MSDN文章“Controlling default rendering”。

<小时/> 请注意,某些条件(如此处列出的条件)可能会强制Internet Explorer以不同于网页中指定的文档兼容模式显示页面。

  • 页面启用了兼容性视图。
  • 该页面已加载到Intranet区域,并且Internet Explorer配置为对从Internet区域加载的页面使用兼容性视图。
  • 页面从用户的本地文件系统加载(这意味着页面加载在Intranet区域中),并且Internet Explorer配置为对从Internet区域加载的页面使用兼容性视图。
  • Internet Explorer配置为在兼容性视图中显示所有网站。
  • Internet Explorer配置为使用兼容性视图列表,该列表指定一组始终显示在兼容性视图中的网站。
  • 开发人员工具用于覆盖网页中指定的设置。
  • 网页遇到页面布局错误,并且Internet Explorer配置为通过在兼容性视图中重新打开页面自动从此类错误中恢复。
  • 该页面包含一个Web标记,用于指示它在特定区域中加载。

这些链接提供了其他信息,描述了Internet Explorer如何确定网页的相应文档模式:

答案 2 :(得分:5)

我知道你已经有了答案,但今天我一直在搜索导致IE8触发兼容模式的原因。 我搜索了JavaScript代码,css(:first,:last等),但它似乎是一些内联样式:

最大高度与溢出..

所以这个(也)触发了IE8中的兼容模式:

style="overflow:scroll;max-height:200px;"

这不是,所以它解决了我的问题:

style="overflow:scroll;height:200px;"

编辑: 我认为这是相关的: IE8 overflow:auto with max-height

答案 3 :(得分:2)

我知道这是一个老问题,但我想我会添加一些我刚刚遇到的东西。我遇到了强制兼容模式的问题,我无法追踪来源。我手动将页面从兼容模式中删除,并注意到某些字符没有显示出来。它最终成为一个在伪元素上使用自定义字符的项目符号列表:

li:before {
  content: '\25B6';
}

作为一个快速解决方案,我最终只是为小于9的IE覆盖了这个:

.lt-ie9 li:before {
  content: '';
}

This article给了我寻找错误处理字符的想法。希望如果他们遇到类似的问题,这会有所帮助!