Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Css 使IE 9在没有Doctype的标准模式下工作_Css_Html_Internet Explorer_Doctype - Fatal编程技术网

Css 使IE 9在没有Doctype的标准模式下工作

Css 使IE 9在没有Doctype的标准模式下工作,css,html,internet-explorer,doctype,Css,Html,Internet Explorer,Doctype,我希望这里有人能帮助我。我知道,在IE 9中,如果我不定义doctype,则存在怪癖模式和标准模式,例如: <!DOCTYPE html> 作为html的第一行,浏览器将进入怪癖模式 问题是,我正在用HTML编写一些东西,然后这些东西将被嵌入到另一个网站(我已经检查过了,没有doctype声明,该网站属于我的学校,所以我没有办法更改它) 所以最终会是这样的 <html> .... </html> //the original website code &

我希望这里有人能帮助我。我知道,在IE 9中,如果我不定义doctype,则存在怪癖模式和标准模式,例如:

<!DOCTYPE html>

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

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

所以最终会是这样的

<html> .... </html> //the original website code
<!DOCTYPE html>//my doctype declaration
<html>... </html> //my html code
//原始网站代码
//我的doctype声明
...  //我的html代码
如您所见,我的DOCTYPE变得毫无用处

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

所以我的问题是,有没有人强迫IE9在没有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
//将页面放入xhtml
//这样强迫它
他们都不为我工作

有什么想法吗

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

提前谢谢

编辑:更新:

大家好,谢谢你们的帮助。我知道有………。然而,这是我的项目的一个限制,我无法控制它。此外,我只能操作内部。

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

我最后做的是剥离html页面的css(这样不管浏览器是否在标准模式下运行),相反,我在整个html中添加了内嵌样式(非常基本的样式),这是一项痛苦的工作

这似乎是IE9没有预料到的一个极端情况,正如我所测试的,这个问题在Chrome、Firefox、IE8中并不存在

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

为什么没有
?这是最糟糕的选择

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

DOCTYPE(document type declaration的缩写)通知验证器您正在使用(X)HTML的哪个版本,并且必须出现在每个网页的顶部。doctype是兼容网页的关键组件:没有它们,您的标记和CSS将无法验证。

好书:


  • 您只能在页面内容的开头选择标准模式或怪癖模式。(也可能在开头附近使用meta标记,或者使用HTTP头,但我也不是IE专家。我认为IE9或IE10中的某些情况发生了变化,因此这两个版本都有一个遗留浏览器版本的问题。)一旦选择了它,就不能在页面的中途“切换”到另一种模式,然后稍后再回来

    这意味着,如果您的内容将在页面的中间插入,而您无法控制或影响外部部分,您将不得不接受使用“怪癖”模式呈现的内容。

    在代码中尽早使用
    标记。它必须出现在
    声明之后、
    标记之后,以及
    标记之后(如果存在),但随后它应该出现在任何其他标记之前


    例如,如果前面只有
    (一个内容为空的
    样式
    元素),IE 9将进入怪癖模式。显然,IE希望在处理可能受模式影响的结构之前确定模式。

    对不起,我认为您必须接受怪癖模式

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

    <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>
    
    
    错误的学校代码-无DOCTYPE
    我正确的文档类型页面
    同侧耳

    document.body.appendChild(document.createTextNode(((document.compatMode=='CSS1Compat')?'Standards':'Quirks')+'mode')); var scripts=document.getElementsByTagName(“脚本”); var embedded=scripts[scripts.length-2]; var text=(embedded.firstChild?embedded.firstChild.nodeValue:embedded.innerHTML).replace(“\\/”,“/”); window.onload=函数(){ 文件。书写(文本); }
    document.write将容器页面吹走,并将其替换为您的页面,您将该页面放入
    块中。您需要在整个页面中将
    替换为
    ,以阻止
    块过早结束,否则不需要进行任何更改

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


    然而,你的学校提供的容器代码可能正在做一些重要的事情,上面的代码会破坏这一点,所以你需要在代码中重建它。使用此之前,请先获得许可。很有可能,如果你的学校无法为你提供一个标准模式页面,并且要求你把你的页面放在他们的页面中,他们不会同意(甚至不会理解)这样的诡计。

    嗨,正如我在问题中提到的,我无法选择最终html(原始html+我的html)的第一行是什么。所以我不能把doctype放在第一行,即使我确实想这样做。有没有一种方法可以让doctype声明不必在第一行?@JJackJi doctype不需要在第一行,因为如果您使用像php这样的语言,您必须在页面或标题的第一行开始会话