[whatwg] using postMessage() to send to a newly-created window

I understand the rationale, and the workaround you suggest does work,
(I have tested it, in FF, Safari and Chrome). But, as Jonas mentioned,
this isn't what we do with workers, and it feels counter-intuitive to
me (I'm having trouble thinking of other async messaging models that
require an application-level handshake like this before messaging can
commence). Are there reasons other than implementation complexity (an
okay reason) or backwards-compatibility (a better reason) not to have
the post work in this case? Put differently, would anything break
(other than a rather oddly written app that explicitly counted on this
behavior) if this did work?

As an alternative, would it be possible to create an onChildLoad()
event in the parent so that the parent could reliably send a message
without needing the child's cooperation? These seems only marginally
better than having the child post to the parent, so it may not be
worth it ...

-- Dirk

On Tue, Jan 5, 2010 at 5:00 PM, Darin Fisher <darin at chromium.org> wrote:
> The window doesn't open synchronously, so you should have to wait for
> http://x/ to load (or for its document to at least be created) before you
> can start communicating with it.
> Note: If you instead open "about:blank" you should be able to communicate
> with it synchronously since "about:blank" is loaded synchronously. ?It is
> special-cased.
> From the newly opened window, you could try posting a message to its opener.
> ?The opener could then handle that event and use it as a signal to know that
> it can know begin communicating with the newly opened window.
> I haven't tested any of this ;-)
> -Darin
>
> On Mon, Dec 21, 2009 at 7:24 PM, Dirk Pranke <dpranke at chromium.org> wrote:
>>
>> Hi all,
>>
>> In the course of testing something today, I attempted to create a
>> window and immediately post a message to it, and was surprised that it
>> didn't seem to work.
>>
>> E.g.:
>>
>> var w = window.open("http://x");
>> w.postMessage("hello, world", "*");
>>
>> w never got the message - this seemed to be consistent across Safari,
>> Chrome, and FF (all I had installed on my Mac at the time, so
>> apologies to Opera, IE, and anyone else I've left out).
>>
>> Is this supposed to work? If not, is there a reliable way for the the
>> source to know when it is safe to send a message to the target? The
>> only way I can think of is for the target to send a message back to
>> the source, which only works if the target can get a reference to the
>> source using window.opener, which may or may not be possible or
>> desirable ...
>>
>> If this isn't supposed to work, can we state this explicitly in the spec?
>>
>> -- dirk
>
>

Received on Tuesday, 5 January 2010 20:29:40 UTC