Javascript switch from quirksmode to standard

放肆的年华 提交于 2019-12-01 14:31:20
cHao

The browser typically looks for a doctype at load time to determine whether to use "standards mode" or not, and loads/renders the page based on that decision. Even if you managed to insert a doctype declaration via script, it wouldn't be there in time to matter.

The reason it works in an iframe is that the content is a new document, which is being "loaded" as you write it. Since the doctype is there, that content is rendered in standards mode.

As mentioned in another question on this same topic, you might be able to get away with rewriting the whole document. Basically, (if the page is still in quirks mode,) get document.documentElement.innerHTML, and then write a new document with the proper doctype, and append the HTML from the original document. But it will cause a bunch of issues with scripts and such, and should be avoided. The ideal solution is to fix the HTML to include a doctype, rather than fudging it with a script.

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

or any variant will not work, because a <SCRIPT> tag causes the HTML parser to create an HTML element and a HEAD element if none exists. By the time an HTML element exists (even an implicit one), a DOCTYPE on the token stream is ignored.

Closing and reopening the document will just prevent parsing of any of the following HTML content.

The only way to use document.write to output a DOCTYPE is to create a new blank document that you can write in.

Just solve this server-side.

You could try writing a X-UA-Compatible meta tag:

<meta http-equiv="X-UA-Compatible" content="IE=9" />
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!