1

我希望这里有人可以帮助我。我知道在 IE 9 中,有怪癖模式和标准模式,如果我没有定义文档类型,例如:

<!DOCTYPE html>

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

这是问题所在,我正在用 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

他们都没有为我工作。

有任何想法吗 ?

在这一点上真的很感激任何帮助。

提前致谢!

编辑:更新:

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

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

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

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

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

4

4 回答 4

0

为什么没有<!DOCTYPE>?这是最糟糕的选择。

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

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

好读:

  1. 使用正确的 DOCTYPE 修复您的网站!
  2. 推荐在您的 Web 文档中使用的 Doctype 声明。
于 2012-09-23T05:15:57.763 回答
0

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

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

于 2012-09-23T05:19:49.900 回答
0

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

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

于 2012-09-23T05:49:17.043 回答
0

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

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

<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 清除容器页面并将其替换为您放置在<script type="text/html">块中的页面。您将需要在整个页面中替换为以阻止该</script>块过早结束,否则不应进行任何必要的更改。<\/script><script type="text/html">

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

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

于 2012-09-23T11:57:20.980 回答