我知道这是一个老问题,但我想我会添加一些我刚刚遇到的东西。我遇到了强制兼容模式的问题,我无法追踪来源。我手动将页面从兼容模式中删除,并注意到某些字符没有显示出来。它最终是一个在伪元素上使用自定义字符的项目符号列表:
li:before { content: '\25B6'; }
作为一个快速修复,我最终只是为IE少于9覆盖这个:
.lt-ie9 li:before { content: ''; }
本文 给了我寻找错误处理字符的想法。希望如果他们偶然遇到类似的问题,这对他们有帮助!
以下内容来自MSDN文章“ 控制默认渲染 ”。
这些链接提供了其他信息,描述了Internet Explorer如何确定网页的相应文档模式:
经过长时间的调试会议(使用旧学校的警报来查明失败的地方),这个看似天真的dom操纵线是罪魁祸首:
document.getElementById("literal"+varValue).style.display = "none";
这里没有错误,并且显然找到了元素(即,这不是花园品种空指针)。
这是一个大型应用程序,这个代码周围有很多。我把它切换到以下,这显然阻止了这个问题:
setTimeout(function(){ var layoutEl = document.getElementById("literal"+varValue); if (layoutEl) layoutEl.style.display = "none"; },10)
我知道你已经有了答案,但今天我一直在寻找导致IE8触发兼容模式的原因。 我搜索了JavaScript代码,css(:first,:last等),但它似乎是一些内联样式:
最大高度与溢流相结合..
所以这个(也)触发了IE8中的兼容模式:
style="overflow:scroll;max-height:200px;"
而这不是,所以它解决了我的问题:
style="overflow:scroll;height:200px;"
编辑: 我认为这是相关的: IE8溢出:自动带最大高度