- From: Andrew Fedoniouk <news@terrainformatica.com>
- Date: Mon, 31 Jul 2006 19:32:31 -0700
----- Original Message ----- From: "Ian Hickson" <ian@hixie.ch> To: <whatwg at whatwg.org> 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
Received on Monday, 31 July 2006 19:32:31 UTC