[whatwg] Inter-window communication beyond window.postMessage()
Ian Hickson
ian at hixie.ch
Tue Sep 15 17:52:56 PDT 2009
On Tue, 15 Sep 2009, Sidney San Martín wrote:
> >
> > On Mon, Sep 14, 2009 at 3:06 PM, Ian Hickson <ian at hixie.ch> wrote:
> >
> > 4. Open a SharedWorker and send a MessagePort to the other window.
>
> I'm not too familiar with shared workers, but I read through the spec
> and it looks like they suffer from the SOP (as Drew mentioned).
> (LocalStorage also suffers from this, I shouldn't have included it in
> the original post.)
SOP?
> > How do you know there's a Window to get a hold of if you don't have a
> > hold of it already?
>
> You don't. What's common among the use cases for this kind of
> inter-window communication is that you are trying to talk to windows
> which may have been around longer than you or were created after you. If
> the call fails or you get no response, handle it (tell the user, open
> the window, or do nothing.).
Seems like a shared worker is the best way to do that, since that way you
don't have to worry about a master election each time one of the windows
you're talking to closes.
> > The main reason for Window.postMessage() is communication with iframes
> > (gadgets), not with other top-level browsing contexts. What's the use case
> > for the latter?
>
> On Mon, Sep 14, 2009 at 8:57 PM, Jeremy Orlow <jorlow at chromium.org> wrote:
> > I assume the use case for this is similar with the use case for storage
> > events which essentially is a broadcast mechanism that's specific to just
> > DOM storage. So if, for example, you wanted to tell your other windows
> > "hey! I changed the cookie" then you could do it with a message. This
> > seems much better than, for example polling.
> > This could also be useful if you wanted to say "hey, I just navigated to
> > gmail.com. Do any of you already have the inbox and chat contacts loaded
> > up?". I suppose there's not much advantage to doing it like this over
> > shared workers since either way you're passing messages, but I also don't
> > see any major downsides to allowing broadcasts.
>
> The original case that made me start exploring these APIs was a "stuff
> browser" that I'm working on (think address book). The browser stays
> open (as a popup) and can be used alone, but other pages should be able
> to ask it to navigate to a specific record. A shared worker would
> actually work quite nicely in this situation, but wouldn't work at all
> across-domains.
That's an interesting use case.
(You can work around the current limitation of shared workers being
same-domain only by having an iframe to proxy the request to talk to the
shared worker, and then getting it to post you back a pipe to the worker.
Not hugely elegant, but it'll work for now.)
> For instance, websites are big these days on asking for login
> information for webmail clients to pull down contacts. What if an
> informal protocol were developed for exchanging contact information?
> Then, let's say I'm on Google Voice and want to call a number from my
> address book (which may be run by an unrelated company). Google Voice
> checks to see if I have a window open that identifies itself as an
> address book, sends it a MessagePort, and displays an "add from
> address book" button next to the phone number field. When I click the
> button, the address book's UI changes to indicate that it's ready for
> me to pick a phone number to send back to Google Voice.
>
> The same concept could apply to a password manager. An informal
> protocol would let login pages broadcast their existence to other
> windows and and if the user happens to have a web-based password
> manager open, it could answer the request and send back credentials.
>
> I'm not great at coming up with use cases, but messaging between
> separate top-level browsing contexts with different origins isn't
> covered by the current APIs, and it's a broad enough category that
> more-creative developers will want it once they realize that message
> passing exists at all.
I think the experience would be better using a shared worker for this, to
be honest. You don't want to have to pop up a new window if the user
doesn't yet have one for the contacts window, or something like that.
--
Ian Hickson U+1047E )\._.,--....,'``. fL
http://ln.hixie.ch/ U+263A /, _.. \ _\ ;`._ ,.
Things that are impossible just take longer. `._.-(,_..'--(,_..'`-.;.'
More information about the whatwg
mailing list