Javascript从怪癖模式切换到标准模式

Javascript switch from quirksmode to standard

本文关键字:模式 标准 Javascript      更新时间:2023-09-26

是否有一种方法可以使用Javascript将quirkmode中的页面切换到标准模式?

例如,假设我有以下包含html的页面。我试过以下方法。

<html><script src="js.js"></script></html>

和js.js

中的以下内容
document.open();
document.write('<!doctype html><html></html>');
document.close();

从上面的输出来看,我基本上是在尝试将quirkmode的页面转换为标准模式,但它不起作用。(在iframe上设置类似的页面内容就可以了)

iframe作品

它工作你做document.createElement('iframe')追加到文档中,并调用iframe.contentWindow.document.write('<!doctype html>..');对它。不幸的是,如果我在当前页面上调用它,同样的技术就不适用了。

有没有人有一个工作的修复切换页面在怪癖模式到标准模式?

编辑:创建和附加iframe,并简单地将其高度和宽度设置为100%,工作,但不是这里的目标;)

浏览器通常在加载时查找文档类型,以确定是否使用"标准模式",并根据该决定加载/呈现页面。即使您设法通过脚本插入doctype声明,它也不会及时出现。

它在iframe中工作的原因是内容是一个新文档,当您编写它时正在"加载"。由于doctype已经存在,所以该内容将以标准模式呈现。

正如在同一主题的另一个问题中提到的,您可能能够重写整个文档。基本上,(如果页面仍然处于怪癖模式,)获得document.documentElement.innerHTML,然后用适当的文档类型编写一个新文档,并从原始文档中添加HTML。但它会导致脚本等一系列问题,应该避免。理想的解决方案是修复HTML,使其包含doctype,而不是用脚本来敷衍它。

<script>
document.open();
document.write('<!doctype html><html></html>');
document.close();
</script>

或任何变体都不能工作,因为<SCRIPT>标记导致HTML解析器创建一个HTML元素和一个HEAD元素(如果不存在的话)。当HTML元素存在时(即使是隐式元素),标记流上的DOCTYPE将被忽略。

关闭和重新打开文档只会阻止解析以下任何HTML内容。

使用document.write输出DOCTYPE的唯一方法是创建一个新的空白文档,您可以在其中写入。

解决这个服务器端

您可以尝试编写一个x - ua兼容的元标记:

<meta http-equiv="X-UA-Compatible" content="IE=9" />