Javascript从quirksmode切换到standard
有没有办法使用Javascript将quirksmode中的页面切换到standards模式 例如,假设我有一个包含html的页面。我试过以下方法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>');
<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中