【问题标题】:Make IE 9 work in standard mode without Doctype使 IE 9 在没有 Doctype 的标准模式下工作
【发布时间】:2012-09-23 05:14:25
【问题描述】:

我希望这里有人可以帮助我。我知道在 IE 9 中,有 quirks 模式和标准模式,如果我没有定义一个 doctype,例如:

<!DOCTYPE html>

作为我的 html 的第一行,浏览器将进入 quirks 模式。

这就是问题所在,我正在用 HTML 编写一些东西,然后将其嵌入到另一个站点中(我已经检查过,没有 doctype 声明,该站点属于我的学校,所以我没有办法改变它)。

所以最后会是这样的

<html> .... </html> //the original website code
<!DOCTYPE html>//my doctype declaration
<html>... </html> //my html code

如您所见,我的 DOCTYPE 变得毫无用处。

不,我无法更改原始 html 代码,也无法强制它使用 iframe 或其他任何可能对我有帮助的东西。

所以我的问题是,有没有人强制 IE 9 在没有 DOCTYPE 的情况下以标准模式运行?

我试过了:

<html xmlns="http://www.w3.org/1999/xhtml"> //putting page in xhtml

<meta http-equiv="X-UA-Compatible" content="IE=9" />//forcing it like this

它们都不适合我。

有什么想法吗?

在这一点上非常感谢任何帮助。

提前致谢!

编辑:更新:

大家好,感谢您的帮助。我知道拥有 ... ... ... 是一种可怕的做法。然而,这是我的项目的一个限制,我无法控制它。还有,我只能操作内部的...

我四处搜索,似乎没有“很棒”的解决方案,正如有人建议的那样,可以使用 Javascript 强制 IE 9 以标准模式运行,但这对我的项目来说并不理想。

我最终做的是剥离我的 html 页面的 css(这样浏览器是否在标准模式下运行都没有关系),相反,我在整个 HTML 中添加了内联样式(非常基本的样式)作为一个痛苦的解决方法。

这似乎是 IE 9 没有预料到的一个极端情况,这个问题在 Chrome、Firefox、IE 8 中不存在,因为我已经测试过。

无论如何,谢谢大家的帮助!

【问题讨论】:

  • 还请注意,您不能在单个 html 文档中包含您提到的结构:&lt;html&gt;...&lt;/html&gt;&lt;html&gt;...&lt;/html&gt;

标签: css html internet-explorer doctype


【解决方案1】:

为什么没有&lt;!DOCTYPE&gt;?这是最糟糕的选择。

&lt;!DOCTYPE&gt; 声明必须是 HTML 文档中的第一件事,在 &lt;html&gt; 标记之前。 &lt;!DOCTYPE&gt; 声明不是 HTML 标记。它是对 Web 浏览器的指示,说明页面是用什么版本的 HTML 编写的。

DOCTYPE(“文档类型声明”的缩写)通知验证器您正在使用哪个版本的 (X)HTML,并且必须出现在每个网页的最顶部。 DOCTYPE 是合规网页的关键组成部分:没有它们,您的标记和 CSS 将无法验证。

好读:

  1. Fix Your Site With the Right DOCTYPE!
  2. Recommended Doctype Declarations to use in your Web document.

【讨论】:

  • 嗨,正如我在问题中提到的,我无法选择最终 html(原始 html + 我的 html)中的第一行是什么。所以我不能把 doctype 放在第一行,即使我肯定想这样做。是否有解决方法使 doctype 声明不必是第一行?
  • @JJackJi doctype 不需要先打开,因为如果您使用像 php 这样的语言,您必须在页面或标题的第一行开始会话,您需要在 html 标签之前声明停靠类型
  • 您好,我认为对于 IE 9,它必须是第一行,否则它会进入 quirks 模式,从而弄乱 css。
  • 这根本没有回答问题。如果您认为答案是“您不能”,您应该这样说,并尽可能提供参考资料。关于形式要求和验证的讨论根本不相关,并且部分不正确(文档类型only触发标准/几乎标准/怪癖模式,它不“通知HTML版本”)。
【解决方案2】:

您只能在页面内容的开头选择标准模式或怪癖模式。 (也可能在开头附近使用元标记,或者使用 HTTP 标头,但我也不是 IE 专家可以肯定。而且我认为其中一些在 IE9 或 IE10 中发生了变化,所以有一个遗留问题- 浏览器版本与任何一个都有关。)一旦选择它,您就不能在页面中途“切换”到另一种模式,然后再返回。

这意味着,如果您的内容要插入到页面的中间,而您无法控制或影响外部部分,那么您将不得不忍受使用 quirks 模式呈现的内容。

【讨论】:

    【解决方案3】:

    在您的代码中尽早使用&lt;meta http-equiv="X-UA-Compatible" content="IE=9" /&gt; 标签。它必须出现在&lt;!doctype ...&gt; 声明之后、&lt;html&gt; 标记之后以及&lt;head&gt; 标记(如果存在)之后,但它应该出现在任何其他标记之前。

    例如,如果在它之前只有&lt;style&gt;&lt;/style&gt;(一个内容为空的style 元素),IE 9 将进入 Quirks 模式。显然,IE 想要在处理可能受模式影响的构造之前决定模式。

    【讨论】:

      【解决方案4】:

      我认为你将不得不接受怪癖模式,抱歉。

      这是邪恶的,但理论上,你可以在下面做这样的事情。

      <html>
      <title>Bad School Code - No DOCTYPE</title>
      <!-- embedded code  -->
      <script type="text/html"><!DOCTYPE html>
       <html lang="en-US">
        <head>
          <title>My Properly DOCTYPE'd Page</title>
          <meta charset="UTF-8">
        </head>
        <body>
          <p>lorem ipsum solor sit amet</p>
          <script>
            document.body.appendChild(document.createTextNode(((document.compatMode=='CSS1Compat')?'Standards': 'Quirks')+' mode.'));
          <\/script>
        </body>
       </html>
      </script>
      <script>
        var scripts = document.getElementsByTagName("script");
        var embedded = scripts[scripts.length - 2];
        var text = (embedded.firstChild ? embedded.firstChild.nodeValue : embedded.innerHTML).replace('\\/', '/');
        window.onload = function() {
          document.write(text);
        }
      </script> 
      <!-- end embedded code  -->
      </html>
      

      document.write 删除容器页面并将其替换为您放置在 &lt;script type="text/html"&gt; 块中的页面。您需要在整个页面中将&lt;/script&gt; 替换为&lt;\/script&gt;,以阻止&lt;script type="text/html"&gt; 块过早结束,否则无需进行任何更改。

      请注意,在上面的示例中,document.write 运行后剩余的 html 是有效的 HTML5,如果您告诉验证器将其验证为 HTML5,则整个页面也将通过验证。

      但是,您学校提供的容器代码可能正在做一些重要的事情,上面的代码会破坏它,因此您需要在代码中重新构建它。在使用它之前,请获得许可。奇怪的是,如果您的学校一开始就无法为您提供标准模式页面,并且要求您将页面放入他们的页面中,那么他们不会批准(甚至理解)这样的诡计。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-22
        相关资源
        最近更新 更多