我正在寻找一种方法,如何在浏览器中的多个选项卡或窗口之间进行通信(在同一个域上,而不是CORS),而不留痕迹.有几个解决方案:
第一个可能是最糟糕的解决方案 - 你需要从当前窗口打开一个窗口,然后只要你打开窗户就可以进行通信.如果您在任何窗口中重新加载页面,则很可能会丢失通信.
第二种方法,使用postMessage,可能启用跨源通信,但遇到与第一种方法相同的问题.您需要维护一个窗口对象.
第三种方式,使用cookie,在浏览器中存储一些数据,这可以有效地看起来像向同一域上的所有窗口发送消息,但问题是你永远不知道所有标签是否已经读过"消息"打扫干净.您必须实现某种超时以定期读取cookie.此外,您受限于最大cookie长度,即4KB.
使用localStorage的第四种解决方案似乎克服了cookie的限制,甚至可以使用事件进行监听.接受的答案中描述了如何使用它.
编辑2018:接受的答案仍然有效,但现代浏览器有一个更新的解决方案,使用BroadcastChannel.有关如何使用BroadcastChannel在选项卡之间轻松传输消息的简单示例,请参阅其他答案.
我有两个窗口:窗口A和窗口B.
问题:
我知道这样做的两种方式:
但这两种方式并不那么优雅.
例如,获得窗口B的引用并使用window.postMessage()(HTML5)会很不错
最终的目标是制作像facebook这样的东西,如果你打开4个Facebook标签并在一个标签中聊天,聊天是最新的每个Facebook标签,这是整洁的!
如何在一个浏览器下刷新多个网站页面?
例如.我有几个内部定制设计网站,我想在我的用户的大型LCD面板中显示,类似屏幕保护程序,但这是循环通过几个网页URL在全屏窗口(F11)
谢谢.
我有两个网页.在第一页,我必须提交一份表格.使用表单中的值(使用嵌入式javascript),我需要生成另一个javascript文件,并在下一页中使用此生成的javascript文件.如何才能做到这一点?或者有更好的方法吗?
例如,我想通过socket.io,longpolling等多个选项卡刷新聊天消息,无论我拥有什么...为此,我只想对所有选项卡使用单个连接。我该怎么做?我可以将公用数据存储在localStore,Cookie等...中,并且我需要某种信号量,该信号量仅将单个同步器资源分配给一个选项卡,并且在关闭该选项卡后,将其提供给另一个选项卡,依此类推。 ..那怎么可能?我想到的唯一解决方案是,通过onbeforeunload告诉localStore资源是免费的,但这并不是在所有浏览器中都有效。还有其他选择吗?
javascript long-polling local-storage socket.io single-page-application
javascript ×5
html5 ×2
browser ×1
css ×1
file ×1
html ×1
ipc ×1
long-polling ×1
postmessage ×1
socket.io ×1