有没有办法使用Javascript将quirksmode中的页面切换到标准模式?
例如,假设我有以下页面,其中包含html。我尝试了以下内容。
<html><script src="js.js"></script></html>
以及js.js中的以下内容
document.open();
document.write('<!doctype html><html></html>');
document.close();
从上面的输出看,我基本上试图将quirksmode中的页面转换为标准模式,但它不起作用。 (在iframe上设置上面的页面内容正常工作)
您可以将document.createElement('iframe')
附加到文档中并在其上调用iframe.contentWindow.document.write('<!doctype html>..');
。不幸的是,如果我在当前页面上调用它,则不会使用相同的技术。
编辑:创建并附加iframe,只需将其高度和宽度设置为100%即可,但不是此处的目标;)
答案 0 :(得分:3)
浏览器通常在加载时查找doctype 以确定是否使用“标准模式”,并根据该决定加载/呈现页面。即使您设法通过脚本插入doctype声明,也不会及时到达。
它在iframe中工作的原因是内容是一个新文档,在您编写时会被“加载”。由于doctype存在,该内容以标准模式呈现。
如another question on this same topic中所述,可能能够重写整个文档。基本上,(如果页面仍处于怪异模式),获取document.documentElement.innerHTML
,然后使用正确的doctype编写新文档,并附加原始文档中的HTML。但它会导致脚本等问题,并且应该避免。理想的解决方案是修复HTML以包含doctype,而不是用脚本捏造它。
答案 1 :(得分:1)
<script>
document.open();
document.write('<!doctype html><html></html>');
document.close();
</script>
或任何变体都不起作用,因为<SCRIPT>
标记会导致HTML解析器创建HTML元素和HEAD元素(如果不存在)。当HTML元素存在时(甚至是隐式的),将忽略令牌流上的DOCTYPE。
关闭并重新打开文档只会阻止解析以下任何HTML内容。
使用document.write
输出DOCTYPE的唯一方法是创建一个可以写入的新空白文档。
解决这个服务器端问题。
答案 2 :(得分:0)
您可以尝试编写兼容X-UA的元标记:
<meta http-equiv="X-UA-Compatible" content="IE=9" />