0

有没有办法使用 Javascript 将 quirksmode 中的页面切换到标准模式?

例如,假设我有以下页面,其中包含 html。我试过以下。

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

以及js.js中的以下内容

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

通过查看上面的输出,我基本上是在尝试将 quirksmode 中的页面转换为标准模式,但它不起作用。(在 iframe 上设置上述页面的内容可以正常工作)

iframe 作品

它可以让您document.createElement('iframe')添加到文档中并调用iframe.contentWindow.document.write('<!doctype html>..');它。不幸的是,如果我在当前页面上调用它,同样的技术不会。

有没有人有一个有效的修复程序将 quirksmode 中的页面切换到标准模式?

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

4

3 回答 3

3

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

它在 iframe 中工作的原因是内容是一个新文档,在您编写它时正在“加载”。由于文档类型在那里,该内容以标准模式呈现。

正如在同一主题的另一个问题中提到的那样,您可能能够摆脱重写整个文档。基本上,(如果页面仍处于 quirks 模式)获取document.documentElement.innerHTML,然后使用正确的 doctype 编写一个新文档,并附加原始文档中的 HTML。但这会导致脚本等一系列问题,应该避免。理想的解决方案是修复 HTML 以包含文档类型,而不是用脚本来伪造它。

于 2011-08-12T23:16:45.720 回答
1
<script>
document.open();
document.write('<!doctype html><html></html>');
document.close();
</script>

或者任何变体都不起作用,因为<SCRIPT>标签会导致 HTML 解析器创建一个 HTML 元素和一个 HEAD 元素(如果不存在)。当 HTML 元素存在时(甚至是隐式元素),令牌流上的 DOCTYPE 将被忽略。

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

用于输出 DOCTYPE的唯一方法document.write是创建一个可以写入的新空白文档。

只要解决这个服务器端。

于 2011-08-12T23:13:29.953 回答
0

您可以尝试编写 X-UA-Compatible 元标记:

<meta http-equiv="X-UA-Compatible" content="IE=9" />
于 2011-08-12T23:36:49.280 回答