标签或窗口之间的通讯
我正在寻找一种方法,如何在浏览器中的多个选项卡或窗口之间进行通信(在同一域中,而不是在CORS上)而不会留下痕迹。有几种解决方案: 使用窗口对象 postMessage 饼干 本地存储 第一个可能是最糟糕的解决方案-您需要从当前窗口中打开一个窗口,然后您只有在保持打开状态的情况下才能进行通信。如果您在任何窗口中重新加载页面,则很可能失去了通信。 使用postMessage的第二种方法可能启用了跨域通信,但是遇到了与第一种方法相同的问题。您需要维护一个窗口对象。 第三种方法,使用cookie,将一些数据存储在浏览器中,这实际上看起来像是向同一域中的所有窗口发送消息,但是问题是您永远无法知道所有选项卡之前是否都已读取“消息”打扫干净。您必须实现某种超时才能定期读取Cookie。此外,您受到最大Cookie长度(4KB)的限制。 第四个解决方案,使用localStorage,似乎克服了cookie的限制,甚至可以监听事件。可接受的答案中描述了如何使用它。 编辑2018:可接受的答案仍然有效,但是对于现代浏览器来说,有一个更新的解决方案可以使用BroadcastChannel。请参阅其他答案,以获取一个简单的示例,该示例描述了如何使用BroadcastChannel在选项卡之间轻松地传输消息。