Is there a way to switch a page in quirksmode to standards mode using Javascript?
For example, assuming I have the following page with html in it. I've tried the following.
<html><script src="js.js"></script></html>
and the following content in js.js
document.open();
document.write('<!doctype html><html></html>');
document.close();
From looking at the output above I'm basically trying to convert a page in quirksmode to standards mode, but it doesn't work. (setting the contents of a page like above on an iframe works fine)
It works you do document.createElement('iframe')
append into the document and call iframe.contentWindow.document.write('<!doctype html>..');
on it. Unfortunately the same technique does not if I'm calling it on the current page.
EDIT: Creating and appending an iframe and simply setting its height and width to 100%, works but isn't the goal here ;)
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.