2013-03-07 104 views
3

我想启用两个窗口使用window.postMessage进行通信。但这些窗口没有初始连接---一个不是另一个的iframe。有什么办法可以让这两个窗口“找到”彼此,以便他们可以沟通?窗口似乎没有任何方法可以通过“名称”查找另一个窗口。我可以安排在同一个域中设置一个cookie,但是没有办法将一个对象/指针放入cookie中。帮助浏览器窗口会合window.postmessage

回答

1

我错了! HTML5 weekly刚刚出来,并包括一个链接到an article solving this exact problem

该技术利用localStorage作为同一域上所有窗口共享的可观察和可修改的资源。事实证明Facebook和谷歌已经这么做了多年!

There's a demo(以并排的几个窗户边打开这个,这是很mindblowing)具有非常可读的代码,但核心机制如下:

广播事件

window.localStorage.setItem('key', value); 

监听事件

window.addEventListener('storage', function(event){ 
    var message = event.newValue; 
} 

被此吹走。我将不得不以某种方式实现这一点。

+0

原来[StackOverflow聊天也使用这个](http://meta.stackexchange.com/questions/85034/multiple-chat-tabs/85045#85045)。一直在我们的鼻子下! – Barney 2013-03-13 13:42:18

+0

是的,我过去曾使用基于cookie的类似技术。它可以工作,但感觉很笨重:当我想要的是两个窗口之间的同步(并且理想情况下,无窃听)通信时,被迫设置状态(我可以在很长时间后可以检查/修改)会出现问题。 – 2013-03-17 05:56:56