我有一个应用程序,在某些情况下会导致IE8弹出兼容性消息并在compat模式下重新加载:
显示问题导致Internet Explorer刷新网页 使用兼容性视图
这是罕见的,据我所知,由于元标记不会发生。它发生在对改变DOM的用户操作的响应中。这与以下问题相同:https://superuser.com/questions/215281/how-do-i-stop-i-e-jumping-into-compatability-view,但我的问题是:什么类型的事情会导致这种情况,作为修复它的辅助手段。
换句话说,请参阅此网站thesitewizard.com,其中IE8中兼容模式的第三个原因描述为:
,有时,还有其他一些不可思议的,无证件的理由 被验证为符合标准的页面(或者,至少它确实符合标准) 这在候选人1)中。
问题是:什么是不可思议的,没有证据的原因?
答案 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以不同于网页中指定的文档兼容模式显示页面。
这些链接提供了其他信息,描述了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给了我寻找错误处理字符的想法。希望如果他们遇到类似的问题,这会有所帮助!