- From: Dirk Pranke <dpranke@chromium.org>
- Date: Tue, 5 Jan 2010 20:29:40 -0800
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