Closed Bug 51844 Opened 24 years ago Closed 23 years ago

about:blank is invalid

Categories

(Core :: Networking, defect, P3)

defect

Tracking

()

VERIFIED FIXED
mozilla0.9.5

People

(Reporter: ian, Assigned: Biesinger)

References

()

Details

Attachments

(2 files, 1 obsolete file)

The "about:blank" page is empty but tagged as text/html, and is thus invalid and is causing the HTML parser to turn it into "<html><body></body></html>". This is just as invalid, but whatever. A fix for this would be as follows: netwerk/protocol/about/src/nsAboutBlank.cpp, line 33: - static const char kBlankPage[] = ""; + static const char kBlankPage[] = + "<blank xmlns=\"http://www.mozilla.org/about\"/>"; netwerk/protocol/about/src/nsAboutBlank.cpp, line 49 (now 50): - rv = NS_NewInputStreamChannel(&channel, aURI, in, "text/html", + rv = NS_NewInputStreamChannel(&channel, aURI, in, "text/xml", nsCRT::strlen(kBlankPage)); ...and then add the following 2 lines as file "about" in the root of the www.mozilla.org webserver: <!ELEMENT blank EMPTY> <!ATTLIST blank xmlns CDATA #FIXED 'http://www.mozilla.org/about'> This is untested.
Why do we currently use a blank text/html as opposed to - blank text/plain - nonblank, valid text/html (3.2? 4.01 transitional? 4.01 strict?) - just nothing (would bug 5569 show up?) Does it have something to do with JavaScript liking to use about:blank as a scratchpad?
->future
Target Milestone: --- → Future
So do we think changing the type will cause any problems?
Many webpages and bookmarklets rely on about:blank being an html file so that they can document.write to it. For example, javascript:x=window.open("about:blank").document;x.write ("<html><head><title>foo</title></head><body>bar</body></html>"); Interestingly, javascript:document.write ("<html><head><title>foo</title></head><body>bar</body></html>"); replaces the title of a normal webpage with "foo" in Mozilla (it doesn't in IE), so it might be ok to replace the blank html page at about:blank with <html><head><title></title></head><body></body></html>. I would want to be sure that the original page is really being wiped by the first document.write, though, because otherwise there might be more subtle problems for javascript using about:blank.
If I load a .txt file and then document.write() to it, it becomes an html file. So changing the MIME type for about:blank to text/plain probably wouldn't cause problems for javascript. I'd be interested to know which MIME type is best for performance (for opening a new window or for opening a new window and document.write()ing to it).
QA Contact: tever → benc
Open Networking bugs, qa=tever -> qa to me.
Some web pages expect to be able to use DOM2 on about:blank in order to create the new document. While changing the mime type might not break document.write, it would break things like createTextNode, especially if the script assumes that the document it's creating is HTML.
This patch changes the about:blank document to this: <!DOCTYPE html PUBLIC "-//IETF//DTD HTML//EN"> <html><head><title></title></head><body></body></html> Which is a valid HTML 2.0 Document, according to validator.w3.org What do you think? I tested if Jesse's Javascript still works, and it works as expected.
Why 2.0?
Why a newer Version? 2.0 is certainly enough for such a simple document. But if you want, I can also use: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> Would you prefer HTML 4? Or would you even suggest XHTML?
Because if the whole reason for it being something is that it will then be used by sites to generate pages out of it, it should be the biggest quirks mode superset possible, and that would be HTML 4.01 Transitional without a URI.
(strange, I don't get emails for changes to this bug...) Hixie, I think the reason to change this is that currently it is invalid HTML, not that it enables Quirks Mode. I think if something is written into about:blank, whatever is written replaces the current content. (Read Comment from Jesse Ruderman on 2000-11-18 20:38). I did test if document.write to it really replaces the content, and it does. So I think that Mozilla will look at the new content to determine whether to use Quirks Mode.
I just checked it: Firstly, I applied my patch to make about:blank a HTML 2 document. Then, I opened about:blank with JavaScript and wrote to it. The Document (which had no doctype) was rendered in Quirks mode. So, IMHO the best solution would be using the HTML 2.0 Doctype. Or did I miss something?
If the document is totally overwritten by document.write, then why not use the solution I proposed at the top of this bug? If Quirks Mode vs Strict Mode doesn't matter, but we have to use HTML, why not use the most up to date version of HTML? (HTML 4.01 Strict) If Quirks Mode does matter, why not use the most up to date version of HTML that triggers quirks mode? (HTML 4.01 Transitional without a URI in the DOCTYPE) What's the advantage of using an obsolete DOCTYPE for our about:blank?
Well, I personally prefer to use the oldest Doctype for which the document is valid. Making this an XML Document, which you suggested at the top, is imho not a good solution (It would need the file at www.mozilla.org, correct?). Using a text/plain file might be a good idea. It would also require the least changes. I did it the way I did because about:blank was already a HTML file, and I wanted to change as little as possible, so I just made it a _valid_ HTML Document. So, I would suggest either an empty text/plain "file", or a valid HTML File. Opinions?
Using XML wouldn't need the file, no. That is purely optional. Using XML has the advantage that the file is then an obscure joke. Using text/plain seems sensible enough, if it works with JS. (Does it?) I don't see any reason to use the oldest DOCTYPE for which the document is valid.While this may have _some_ logic on the web, it is irrelevant here since we know that the UA will support the DOCTYPE we use if we use the most up-to-date one. What advantage is there to using 2.0 over 4.01 ?
Assigning this bug to me and removing helpwanted, as I'm working on this.
Assignee: pavlov → cbiesinger
Keywords: helpwanted
Status: NEW → ASSIGNED
Using an empty text/plain document is very bad. This document would not be blank, but display like this: <html><body></body></html> (might not be exactly the same, but is certainly similar) So, HTML 4.01 Strict seems to be the best solution. Objections? I will attach a patch using HTML 4.01 Strict after I verified that this will work correctly.
HTML 4.01 Strict doesn't work, quirks mode is never activated then after document.write. HTML 4.01 Transitional w/o URL works. Quirks mode is activated/deactivated depending on the DOCTYPE. (I will attach my testcase here. It works in all builds in which bug 93371 is fixed). I will attach a patch which makes the document a valid HTML 4.01 Transitional Document.
Attachment #47136 - Attachment is obsolete: true
Apply the patch by doing this: cd mozilla/netwerk/protocol/about/src patch -p0 < aboutpatch.diff Afterwards, please remove one of the \" at the end of the line with "static const char kBlankPage[]", I accidently added it. Please test on other Platforms than windows, comment and r=.
Target Milestone: Future → mozilla0.9.5
Comment on attachment 49118 [details] [diff] [review] Patch to make about:blank a valid HTML 4.01 Transitional Document r=bbaetz after fixing the extra \"
Attachment #49118 - Flags: review+
why is there not a </head> tag? and why do we need a <title> section?
</head>: I simply forgot it. Neither I nor bbaetz noticed that. And validator.w3.org didn't complain either. <title>: HTML Specification requires that <title> is present in a HTML Document. Correct Patch would be: Index: nsAboutBlank.cpp =================================================================== RCS file: /cvsroot/mozilla/netwerk/protocol/about/src/nsAboutBlank.cpp,v retrieving revision 1.19 diff -u -r1.19 nsAboutBlank.cpp --- nsAboutBlank.cpp 2000/11/17 03:44:56 1.19 +++ nsAboutBlank.cpp 2001/09/12 18:54:20 @@ -30,7 +30,8 @@ NS_IMPL_ISUPPORTS1(nsAboutBlank, nsIAboutModule); -static const char kBlankPage[] = ""; +static const char kBlankPage[] = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">" +"<html><head><title></title></head><body></body></html>"; NS_IMETHODIMP nsAboutBlank::NewChannel(nsIURI *aURI, nsIChannel **result)
sr=darin
verified
Status: RESOLVED → VERIFIED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: