----- Original Message -----
From: "Ian Hickson" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, July 31, 2006 3:34 PM
Subject: [whatwg] What should document.write() do when called from
setTimeout or event handlers?
I'm trying to spec document.write() and I've run into a difficult edge
case.
Imagine the server sees this:
<!DOCTYPE HTML>
<html>
<head>
function test() {
document.write('TEST');
}
setTimeout(test, 1000);
</head>
<body>
<p><img src="test.png" alt="" onload="test()"></p>
...and then time passes. The image loads, the timeout fires.
Then once the image has loaded and the timer has fired:
</body>
</html>
...and the connection is closed.
What should happen?
IE seems to make those calls to document.write() simply blow away the
document, as if the document was closed. Opera seems to do the same.
Mozilla seems to make the document.write() calls insert text into the
parser, as if they'd been called inline, with the result that the inserted
text could appear pretty much anywhere. (It's actually a bit more complex
than that -- it avoids inserting into tokens -- but that's a detail.)
I couldn't work out what Safari and MacIE do; they seem to delay the
timeout somehow and then print to the end of the page.
Any preferences? I'm particularly interested in feedback from browser
developers here as to whether there is anything I should know about how
easy/hard it is to do one thing or the other.
(That is what I never understand : why script is allowed to do anything
during load time. Script should start executing when DOM is complete,
when, e.g. getElementById makes real sense.)
From implementation point of view: all events shall be disabled
until "original DOM complete" state (</html> parsed and processed).
Precisely - events shall be postponed (probably some of them may just
be discarded). First event that shall be fired is window.onload (?)
This is easy to implement and deterministic - read can be implemented
uniformely in all UAs.
Normaly when document.write appears in the <script> section
body of the script has been loaded in full so insertion point for the
write is known - end of the script block.
document.write in other circumstances (event handlers) shall use
end of the body element (?) as an append point.
Andrew Fedoniouk.
http://terrainformatica.com