Re: connection ceremony for iframe postMessage communications

On Fri, 10 Feb 2012, John J Barton wrote:
> 
> I think there are two more cases. Because the messages are all async,
> the 'it gets missed case" can be "it gets delayed". That causes
> additional messages.
> 
>   - parent opens iframe, then sets up communications, iframe is quicker:
>    -  iframe sends 'load' message when ready, but it gets delayed
>    - parent sends 'ping' message
>    - parent get first 'load' message, responds with port
>    - iframe sends 'load' message in response to 'ping'

Yeah, after receiving the first 'load', the parent should stop listening 
for more 'load's.


>  - parent opens iframe, then sets up communications, parent is quicker:
>    - parent sends 'ping' message, but it gets delayed
>    - iframe sends 'load' message when ready
>    - iframe gets 'ping' message, sends 'load' message in response
>    - parent gets 'load' message, responds with port

That's equivalent to the case of the parent not hooking things up until 
after the iframe is ready.


> This doe not change your conclusion, "the first 'load' message indicates 
> ready", but I believe it does mean that a third message (sending the 
> port) is needed.

Well, probably far more than three messages -- each time you want to start 
a conversation you would send a port for that conversation. (By 
"conversation" I mean an instance of the parent invoking a feature that 
the iframe provides.)


> The 'load' message cannot also send the port.

Sure.


> > (In practice it's usually much simpler than any of this because the 
> > parent can guarantee that it sets up its communications first, before 
> > the iframe is even created, and the child can guarantee that it sets 
> > up its communications before it finishes loading, so the parent can 
> > just use the regular 'load' event on the iframe and the child never 
> > needs to wait at all if it wants to start communicating first.)
> 
> Entangling communications setup with iframe 'load' just makes a 
> complicated problem harder, not simpler. If we can encapsulate the above 
> logic in a communications library then we don't have to involve the UI 
> or impact performance delaying load.

Whatever works for you.

-- 
Ian Hickson               U+1047E                )\._.,--....,'``.    fL
http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'

Received on Friday, 10 February 2012 23:56:35 UTC