Css 使IE 9在没有Doctype的标准模式下工作
我希望这里有人能帮助我。我知道,在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 &
<!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这样的语言,您必须在页面或标题的第一行开始会话