3
我想启用两个窗口使用window.postMessage进行通信。但这些窗口没有初始连接---一个不是另一个的iframe。有什么办法可以让这两个窗口“找到”彼此,以便他们可以沟通?窗口似乎没有任何方法可以通过“名称”查找另一个窗口。我可以安排在同一个域中设置一个cookie,但是没有办法将一个对象/指针放入cookie中。帮助浏览器窗口会合window.postmessage
我想启用两个窗口使用window.postMessage进行通信。但这些窗口没有初始连接---一个不是另一个的iframe。有什么办法可以让这两个窗口“找到”彼此,以便他们可以沟通?窗口似乎没有任何方法可以通过“名称”查找另一个窗口。我可以安排在同一个域中设置一个cookie,但是没有办法将一个对象/指针放入cookie中。帮助浏览器窗口会合window.postmessage
我错了! 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;
}
被此吹走。我将不得不以某种方式实现这一点。
原来[StackOverflow聊天也使用这个](http://meta.stackexchange.com/questions/85034/multiple-chat-tabs/85045#85045)。一直在我们的鼻子下! – Barney 2013-03-13 13:42:18
是的,我过去曾使用基于cookie的类似技术。它可以工作,但感觉很笨重:当我想要的是两个窗口之间的同步(并且理想情况下,无窃听)通信时,被迫设置状态(我可以在很长时间后可以检查/修改)会出现问题。 – 2013-03-17 05:56:56