Html 哪些特定因素导致IE8触发兼容模式?

Html 哪些特定因素导致IE8触发兼容模式?,html,internet-explorer-8,ie8-compatibility-mode,Html,Internet Explorer 8,Ie8 Compatibility Mode,我有一个应用程序,在某些情况下会导致IE8弹出兼容消息并以兼容模式重新加载: 显示问题导致internet explorer刷新网页 使用兼容性视图 据我所知,这种情况很少见,而且不会因为meta标签而发生。它是对改变DOM的用户操作的响应。这与:,是同一个问题,但我的问题是:是什么类型的事情导致了这一点,作为修复它的帮助 换句话说,请参阅本网站,其中IE8中兼容性模式的第三个原因描述为: 有时,由于其他一些深不可测的、没有记录的原因 验证为符合标准(或至少符合标准)的页面 这将在候选版本1)中

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

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

据我所知,这种情况很少见,而且不会因为meta标签而发生。它是对改变DOM的用户操作的响应。这与:,是同一个问题,但我的问题是:是什么类型的事情导致了这一点,作为修复它的帮助

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

有时,由于其他一些深不可测的、没有记录的原因 验证为符合标准(或至少符合标准)的页面 这将在候选版本1)中进行


问题是:有什么深不可测的、未记录的原因?

经过一段长时间的调试过程(使用老派的警报来找出哪里出了问题),这种看似无害的dom操作是罪魁祸首:

document.getElementById("literal"+varValue).style.display = "none";
这里没有错误,元素显然已找到(即,这不是花园品种的空指针)

这是一个大规模的应用程序,有很多关于这段代码。我将其切换到以下内容,这显然阻止了问题的发生:

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

以下内容来自MSDN文章“”


请注意,某些条件(如此处列出的条件)可能会迫使Internet Explorer以不同于网页中指定的文档兼容模式显示页面

  • 已为页面启用兼容性视图
  • 页面加载到Intranet区域,Internet Explorer配置为对从Internet区域加载的页面使用兼容性视图
  • 该页面是从用户的本地文件系统加载的(这意味着该页面加载在Intranet区域中),Internet Explorer配置为对从Internet区域加载的页面使用兼容性视图
  • Internet Explorer配置为在兼容性视图中显示所有网站
  • Internet Explorer配置为使用兼容性视图列表,该列表指定一组始终显示在兼容性视图中的网站
  • 开发人员工具用于覆盖网页中指定的设置
  • 该网页遇到页面布局错误,Internet Explorer配置为通过在“兼容性”视图中重新打开该页面来自动从此类错误中恢复
  • 该页面包含一个Web标记,该标记指示将其加载到特定区域
这些链接提供了其他信息,说明Internet Explorer如何为网页确定适当的文档模式:


    • 我知道你们都准备好了答案,但今天我也一直在寻找导致IE8触发兼容模式的原因。 我搜索了JavaScript代码、css(:first、:last等),但似乎是某种内联样式:

      与溢流相结合的最大高度

      因此,这(也)触发了IE8中的兼容模式:

      style="overflow:scroll;max-height:200px;"
      
      但事实并非如此,所以它解决了我的问题:

      style="overflow:scroll;height:200px;"
      
      编辑: 我认为这是相关的:
      我知道这是一个老问题,但我想我应该补充一些我刚刚遇到的问题。我遇到了一个问题,兼容模式被强制,我无法找到源代码。我手动将页面移出兼容模式,并注意到一些字符没有显示出来。它最终成为一个项目符号列表,在伪元素上使用自定义字符:

      li:before {
        content: '\25B6';
      }
      
      作为一个快速修复,我最终只是覆盖了IE小于9的内容:

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

      给了我寻找处理不当的角色的想法。如果有人遇到类似的问题,希望这对他们有所帮助

      我从未见过HTML验证页面“跳转”到兼容性视图。但是,在没有看到你的应用程序的情况下,谁又能帮助你呢?否则,这里的答案将只是一个随机的猜测字符串。请参阅问题标题。我正在寻找导致这种情况的原因,以帮助指导调试。如果你从来没有看过,点击问题中的超级用户链接,这里有一个截图。我读了标题,明白你在找什么。然而,提出一个无法给出具体正确答案或解决方案的问题可能会被关闭。如果有人对此问题有答案,他们可以发布:“我有这个问题,发现是X造成的。”或者,“大家都知道,在Y的时候做X会导致这个问题。”天哪!你知道吗?原因#9762任何人都不应该使用IE。谢谢-如果你认为这是一个好问题,请不要忘了向上投票。我删除了在兼容性视图中强制加载的页面上带有溢出的元素,页面正常加载。发现问题。对我来说,试图隐藏特定元素导致IE8使用兼容性视图刷新页面。我使用的是jQuery,所以使用和利用这个选项就达到了目的,例如,
      $(“#id”).hide(1)