Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.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
Javascript从quirksmode切换到standard_Javascript_Quirks Mode - Fatal编程技术网

Javascript从quirksmode切换到standard

Javascript从quirksmode切换到standard,javascript,quirks-mode,Javascript,Quirks Mode,有没有办法使用Javascript将quirksmode中的页面切换到standards模式 例如,假设我有一个包含html的页面。我试过以下方法 <html><script src="js.js"></script></html> 以及js.js中的以下内容 document.open(); document.write('<!doctype html><html></html>');

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

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

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

以及js.js中的以下内容

document.open();
document.write('<!doctype html><html></html>');
document.close();
document.open();
文件。写(“”);
document.close();
从上面的输出来看,我基本上是在尝试将quirksmode中的页面转换为standards模式,但它不起作用。(在iframe上设置上述页面的内容效果很好)

iframe工程 它适用于您执行
document.createElement('iframe')
append到文档中并调用
iframe.contentWindow.document.write('..)在上面。不幸的是,如果我在当前页面上调用它,同样的技术就不起作用

是否有人有一个工作修复程序将页面从quirksmode切换到standards模式? 编辑:创建并附加iframe,只需将其高度和宽度设置为100%,就可以了,但不是这里的目标;)


document.open();
文件。写(“”);
document.close();
或者任何变体都不起作用,因为
标记会导致HTML解析器创建HTML元素,如果不存在,则创建HEAD元素。当HTML元素存在时(即使是隐式元素),令牌流上的DOCTYPE将被忽略

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

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

只需在服务器端解决此问题。


document.open();
文件。写(“”);
document.close();
或者任何变体都不起作用,因为
标记会导致HTML解析器创建HTML元素,如果不存在,则创建HEAD元素。当HTML元素存在时(即使是隐式元素),令牌流上的DOCTYPE将被忽略

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

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


只需解决此服务器端问题。

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

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


如中所述,您可能可以重写整个文档。基本上,(如果页面仍处于怪癖模式,)获取
document.documentElement.innerHTML
,然后使用正确的doctype编写一个新文档,并从原始文档中附加HTML。但是它会导致脚本等的一系列问题,应该避免。理想的解决方案是修复HTML以包含doctype,而不是用脚本捏造它。

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

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


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

您可以尝试编写与X-UA兼容的元标记:

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

您可以尝试编写与X-UA兼容的元标记:

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


现在谁在没有doctype的情况下编写HTML?为什么你不能编辑HTML来包含一个呢?@Ranyos yeah设置
document.write
不起作用,但我觉得如果你创建一个iframe,它会起作用,这很有趣。我想知道为什么?@cHao,这是在回避最初的问题;)@iframe中的内容处于标准模式。现在,没有doctype的HTML编写者的原始页面是否可能重复?为什么你不能编辑HTML来包含一个呢?@Ranyos yeah设置
document.write
不起作用,但我觉得如果你创建一个iframe,它会起作用,这很有趣。我想知道为什么?@cHao,这是在回避最初的问题;)@iframe中的内容处于标准模式。不是原始页面如果它实际删除了文档并创建了一个新文档,那么脚本将如何运行?清除文档的一部分是删除脚本……mozilla文档认为这是值得信任的:| urg。。。我想我必须制定一个新的计划……@Lime,重新打开文档将停止HTML解析,从而阻止其他HTML加载到新文档中。您最多只能得到一个标准模式下的文档,其中没有内容。标准模式下的任何内容都比quirksmode:D好,至少对于me@Lime,然后以
document.write(“”)开始文件:)如果它确实删除了文档并创建了一个新文档,那么脚本将如何运行?清除文档的一部分是删除脚本……mozilla文档认为这是值得信任的:| urg。。。我想我必须制定一个新的计划……@Lime,重新打开文档将停止HTML解析,从而阻止HTML的其余部分加载到ne中