【问题标题】:Does Internet Explorer 11 still have quirks mode?Internet Explorer 11 是否仍具有怪癖模式?
【发布时间】:2023-04-07 01:01:01
【问题描述】:

Internet Explorer 11 是否仍有可用的怪癖模式?我们使用一个非常古老的系统,它依赖于 quirks 模式。

我知道这是一个非常古老且脆弱的环境,但我只是想知道它是否会继续工作。

【问题讨论】:

    标签: internet-explorer quirks-mode internet-explorer-11


    【解决方案1】:

    是的。

    IE11 具有与 IE10 相同的向后兼容模式(当然还有 IE10 兼容模式)。

    其实和IE10一样,其实有两种的quirks模式,它们的差别非常小。 (“怪癖模式”和“IE5 怪癖模式”)。但是对于大多数目的,您实际上并不需要知道这一点。在没有 doctype 的情况下,它将默认为原始 Quirks 模式,与之前的 IE 版本相同。

    因此,对您的问题的简短回答是“是的,您很好;它仍然存在,您的页面在 IE11 中仍然可以像在 IE10 中一样正常工作。”

    但是,IE 的工程师正试图阻止使用这些模式。

    他们做到这一点的主要方法是将它们隐藏在开发工具面板中——浏览器模式选项是可见的,但您最多只有两个选项:页面加载的模式,以及IE11 标准模式的“边缘”模式。如果页面是在标准模式下加载的,那么您只会看到“Edge”选项。

    这意味着是的,您可以在 quirks 模式下加载页面,如果它是这样编写的,但是如果您在标准模式下加载页面,您将无法看到将该页面放回的选项怪癖模式。

    需要注意的一点是,如果您使用某些其他旧功能(例如嵌入在页面中的 ActiveX 控件),您可能会遇到浏览器安全模型的问题。这在 IE10 和 IE11 之间并没有太大变化,所以如果您的页面在 IE10 中工作,那么您应该没问题,但是如果您从 IE9 升级到 IE11,您可能会发现一些问题。有一些方法可以重新启用它,但它可能有点难看。

    我还要指出,从纯 CSS 的角度来看,从 quirks 模式转换为标准模式实际上非常容易。大多数由切换引起的布局故障是由于盒子模型的变化造成的,但只需在 CSS 中添加 *{box-sizing:border-box;} 即可将标准模式设置为使用相同的怪癖模式盒子模型。

    如果布局是主要问题,您应该考虑尝试一下,因为您可能会发现您实际上并不需要 quirks 模式。

    【讨论】:

    • standards 和 quirks mode 之间有大量的 CSS 差异,并且没有关于它们的整体文档。因此,我不会说此举“非常容易”;恰恰相反。
    • 很好的解释!但是,我同意上述评论 - 从怪癖模式转移到标准模式时需要做很多改变。例如:在 quirks 模式下,指定border-style:solid 和border-width:0010 会在底部放置一条线,但在标准模式下,这会在所有4 个边上放置一个边框。此外,在 quirks 模式下,当您在样式内的 html 元素上指定宽度时,宽度应该在标准模式下附加 px ,否则它无法识别它。
    • 我认为您需要将此答案更新为“否”。我记得你可以在开发人员工具窗口中找到“怪癖模式”的日子,但我再也找不到了。我也找不到其他模式。
    • @TomMcDonald - IE11 开发工具中仍列出了 quirks 模式,但在可模拟的 IE 版本列表中简称为“5”。但是,它只在 IE11 中;它出现在替代 IE 的 Edge 浏览器中,因此如果您使用它,您将看不到对 quirks 模式的任何引用,也不会看到旧 IE 版本的任何其他仿真模式。
    【解决方案2】:

    我很抱歉之前没有看到您的问题,但当然有。您需要通过 X-UA-Compatible HTTP 等效标头在 HTML 代码中更改它。

    因此,例如,如果您想模拟 Internet Explorer 8.0,请在头部插入:

    <!DOCTYPE html>
      <html>
        <head>
          <meta http-equiv="X-UA-Compatible" content="IE=8">
            ...
    

    即使是 JavaScript navigator.userAgent 的更改也不会破坏依赖于浏览器版本的脚本。

    navigator.userAgent
    Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C)
    

    就是这样!再见.. 祝您的发展取得最好的成果!!!

    【讨论】:

    • 感谢您的回答!它帮助我解决了我试图在 Web 浏览器控件中加载的 HTML 页面无法正确加载的问题。显然,这一定是因为 Web 浏览器控件在内部使用的 IE 实例没有正确解释 HTML 5 文档。添加以下内容有帮助: