Closed
Bug 30627
Opened 25 years ago
Closed 24 years ago
<frameset> onload handler must fire _after_ child documents have loaded
Categories
(Core :: DOM: Core & HTML, defect, P2)
Core
DOM: Core & HTML
Tracking
()
VERIFIED
WORKSFORME
M18
People
(Reporter: jrgmorrison, Assigned: jst)
References
()
Details
(Whiteboard: [nsbeta2+][ETA 7/25])
The following issue came up during the course of looking at bug #23777. That bug was fixed (it was a floating point error in handling "HTTP/0.9", surprisingly enough). However, this problem still remains. Using today's mozilla.org bits on win95, on *one* occasion, an alert is thrown up that said something like '... thePage has no properties ...'. [I haven't been able to reproduce this error a second time.] There is a crude testcase at http://qsilver.queensu.ca/~buslib/frameload/parent.html (Run with '-console' to see the output). Here are comments by vidur and I from bug #23777. CC: travis for webshell. ------- Additional Comments From 3jrgm@qlink.queensu.ca 2000-01-18 17:40 --- One thing that I noticed about members.xoom.com/whatever pages was that they all have this kind of structure (abbreviated): <frameset onload='doRewrite();'> <frame name='pb'> <frame name='thePage'> </frameset> Now, in 4.x and the js client docs, the onload handler for <frameset> fires *after* the two child frames have loaded (have fired onload). But in mozilla it fires without waiting for the child frames to load. In the particular case of 'members.xoom.com/whatever', doRewrite() manipulates the DOM of <frame name='thePage'>. But "thePage" hasn't loaded at the time that doRewrite() tries to rewrite it's links. This may be the trigger of the eventual crash. (At the very least, it's a bug in its own right -- I'll set up a simple test case and update this bug or file a new one.) But cc: vidur, in case this is already something he knows about. ------- Additional Comments From vidur@netscape.com 2000-01-19 16:59 --- Well...the described bug could well be considered a webshell issue, but I'll hold onto it. Currently onload handlers are firing from notifications that end up in the webshell. The notification for the frameset probably happens when the frameset document itself completes loading. This doesn't match DOM expectations, which might mean we need to store additional state.
Reporter | ||
Comment 1•25 years ago
|
||
One note about the above -- I refer to crash in my comments of jan 18. However, that does not apply, as far as I know, to this bug report. It does not crash.
Comment 2•25 years ago
|
||
Currently the onload handler for a page fires in nsWebShell::OnEndDocumentLoad, when the parser is done with the page. We probably need to get notification when child webshells load and fire the onload only when the number of notifications equals the number of children we have.
Status: NEW → ASSIGNED
Target Milestone: M16
Comment 3•24 years ago
|
||
Nominating nsbeta2. We have to start drawing a line on DOM0 backward compatibility; these bugs are supposed to be a high priority for nsbeta2 per the beta2 criteria.
Keywords: nsbeta2
Reporter | ||
Comment 4•24 years ago
|
||
This is also what the behaviour of xul:iframe's should be (and is not at this time): the parent onload handler must fire after the child iframe's have fired their onload. The xul iframes should pick up this change when it's done in dom, but need to check that this is so (i.e., xul does not need any further changes to make this work).
Per chofmsnn all user pages on xoom.com are busted. if this is webshell lets get valeski/adam lock kicking some butt on it. Putting on [nsbeta2+] radar for beta2 fix.
Whiteboard: [nsbeta2+]
Reporter | ||
Comment 7•24 years ago
|
||
The pages load ok for me, but what is broken is the the frameset is trying to rewrite all the <A HREF> in the lower frame -- since this code executes before the lower frame has loaded, this throws a bunch of js exceptions, and the rewrites fail (thus breaking the xoom.com navigation 'scheme')
Assignee | ||
Comment 8•24 years ago
|
||
Adam, I can't say I have a fix, but I have a "hack" in my tree that fixes this, but there's still a lot to be done before it's ready to be checked in. What I did so far was to add a "state" getter to nsIDocShellTreeItem and based on that the docshell root checks its children when one of them is done loading, and if all child docshells are done, it fires the onload handlers. Two problems still remain: 1. there's no clean way for a docshell child to tell its parent that it's done loading. 2. There's no way for a docshell parent to cleanly fire the onload event, it's possible to fire the event from a parent, but the child doesn't know about the event being fired and it needs to know this to prevent futher fireing of the onload handler if a sibling docshell is reloaded. Here's what I propose doing to continue cleaning this up: Make the tree item state read/write, the different states should be something like this: stateNotLoadingYet stateLoading stateLoaded stateDone (please suggest better names) and then we make the onload event fire when the state is changed from stateLoaded to stateDone. We also need to add a method to nsIDocShell that lets a child inform it's parent (or root, actually) that the childs state changed, something like this: [noscript] childStateChanged(in nsIDocShellTreeItem child, long oldState); I think we'd be able to cover all possible scenarios with something close to the above suggestion, the possible cases we need to handle properly is: a. Loading a standalone document. b. Loading a frameset document with one or more frames in it, possibly even nesetd frames of course. c. Loading a new document into one frame in a frameset (ie if a link is clicked in the frame), ie the frameset itself doesn't reload, nor the other frames. (Cc:ing rpotts since I think he's working on related things in the docshell.) Adam (and others), does this sound reasonable?
Comment 9•24 years ago
|
||
Adding rpotts to the cc: list to get his input.
Assignee | ||
Comment 10•24 years ago
|
||
Taking this bug off Vidurs list.
Assignee: vidur → jst
Status: ASSIGNED → NEW
Comment 11•24 years ago
|
||
Adam, I spoke to Johnny about this and he feels that this bug should belong to the docshell owners. He's away for the DOM face to face meeting in Germany, so I'm doing the re-assignment for him.
Assignee: jst → adamlock
Comment 12•24 years ago
|
||
Rick - what effects do your recent changes to nsIWebProgressListener have on this problem?
Comment 13•24 years ago
|
||
I was planning to dive into this mess next :-) I hope to rework how javascript OnLoad handlers are fired... First, I want to move the code out of the nsIDocumentLoaderObserver implementation and into nsIWebProgressListener Next, I want to push the responsibility of firing the javascript handlers into the docviewer, since it *knows* about javascript onhandlers()... -- rick
Comment 14•24 years ago
|
||
related? http://bugzilla.mozilla.org/show_bug.cgi?id=28572
Comment 15•24 years ago
|
||
M16 has been out for a while now, these bugs target milestones need to be updated.
Assignee | ||
Comment 17•24 years ago
|
||
*** Bug 45369 has been marked as a duplicate of this bug. ***
Comment 18•24 years ago
|
||
-> jst Johnny has agreed to look at my onLoad/onUnload bugs while I'm gone...
Assignee: rpotts → jst
Assignee | ||
Comment 19•24 years ago
|
||
Accepting bug.
Status: NEW → ASSIGNED
OS: Windows 95 → All
Priority: P3 → P2
Hardware: PC → All
Whiteboard: [nsbeta2+] → [nsbeta2+][ETA 7/25]
Target Milestone: M16 → M18
Assignee | ||
Updated•24 years ago
|
Status: ASSIGNED → RESOLVED
Closed: 24 years ago
Resolution: --- → WORKSFORME
Assignee | ||
Comment 20•24 years ago
|
||
I don't know what fixed this nor when that happened, but I'm unable to reproduce this now, it used to be trivial to reproduce, but now it's much less so... Marking WORKSFORME.
Reporter | ||
Comment 21•24 years ago
|
||
Yeah, this is doing the right ordering now (even with multiple nested framesets (win32/linux)).
Reporter | ||
Comment 22•24 years ago
|
||
marking verified worksforme with the 2000080404 binaries on win2k/linux/mac. Prashant, there are some testcases for this here: A simple two-frame frameset (dumps to console) http://jrgm.mcom.com/testcase/dom/frames/frameset-onload/001/ A nested two-frameset/two-frames-per-frameset (dumps to console) http://jrgm.mcom.com/testcase/dom/frames/frameset-onload/002/ A nested two-frameset/two-frames-per-frameset (throws up alerts) suitable for testing the Mac or Nav4.x http://jrgm.mcom.com/testcase/dom/frames/frameset-onload/003/
Status: RESOLVED → VERIFIED
You need to log in
before you can comment on or make changes to this bug.
Description
•