gmail problem investigated: frame onload

Allan Sandfeld Jensen kde at carewolf.com
Mon Oct 4 17:53:24 BST 2004


On Monday 04 October 2004 16:41, David Faure wrote:
> With Rainder Endres' help, I managed to track down the reason gmail won't
> load. The onload event listener for frames and iframes is registered on the
> wrong body: the main body instead of the frame's body. Which means only one
> gets executed, and the JS code waits for ever.
>
> Testcase [gmail uses iframes, but it's the same with frames] :
>
> ==> blank.html <==
> Hello world
>
> ==> frameset.html <==
> <html>
> <frameset rows="*,*,*">
> <frame name="main" src="blank.html" onload="alert('loaded main')">
> <frame name="blank" src="blank.html" onload="alert('loaded blank')">
> </frameset>
> </html>
>
> The problem is HTMLFrameElementImpl::parseAttribute (for ATTR_ONLOAD).
> The code says:
>         static_cast<HTMLDocumentImpl*>( getDocument() )->body()->
>               setHTMLEventListener(EventImpl::LOAD_EVENT,
>            
> getDocument()->createHTMLEventListener(attr->value().string(),"onload"));
> And this obviously finds the main <body> element, since getDocument() for
> the frame element finds the main document.
>
> Did this ever work in KHTML? I thought it did, but looking at the code, I
> fail to see how. Since the attributes are parsed before the frame is
> "attached", so there is no KHTMLPart for the frame yet... i.e. no way to
> find the right document (or body) from that code. So do we need to store
> the value of the load and unload listeners until attach? We would then need
> to have some code somewhere that sets the listener on the frame's body when
> creating it..... I'm working now on a patch that attempts to do that.

I've been looking at how Safari handles it, and have come up with the attached 
patch. It works on your test example, but I do not have a gmail-account to 
test with.

`Allan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: safari.diff
Type: text/x-diff
Size: 7455 bytes
Desc: not available
URL: <https://mail.kde.org/mailman/private/kfm-devel/attachments/20041004/bf5dbc21/attachment.diff>


More information about the kfm-devel mailing list