相关疑难解决方法(0)

标签或窗口之间的通信

我正在寻找一种方法,如何在浏览器中的多个选项卡或窗口之间进行通信(在同一个域上,而不是CORS),而不留痕迹.有几个解决方案:

  1. 使用窗口对象
  2. 的postMessage
  3. 饼干
  4. localStorage的

第一个可能是最糟糕的解决方案 - 你需要从当前窗口打开一个窗口,然后只要你打开窗户就可以进行通信.如果您在任何窗口中重新加载页面,则很可能会丢失通信.

第二种方法,使用postMessage,可能启用跨源通信,但遇到与第一种方法相同的问题.您需要维护一个窗口对象.

第三种方式,使用cookie,在浏览器中存储一些数据,这可以有效地看起来像向同一域上的所有窗口发送消息,但问题是你永远不知道所有标签是否已经读过"消息"打扫干净.您必须实现某种超时以定期读取cookie.此外,您受限于最大cookie长度,即4KB.

使用localStorage的第四种解决方案似乎克服了cookie的限制,甚至可以使用事件进行监听.接受的答案中描述了如何使用它.

编辑2018:接受的答案仍然有效,但现代浏览器有一个更新的解决方案,使用BroadcastChannel.有关如何使用BroadcastChannel在选项卡之间轻松传输消息的简单示例,请参阅其他答案.

javascript browser html5 ipc broadcast-channel

136
推荐指数
7
解决办法
7万
查看次数

JavaScript的; 具有相同来源的标签/窗口之间的通信

我有两个窗口:窗口A和窗口B.

  • 窗口A和窗口B具有相同的域
  • 窗口A和窗口B没有任何父窗口.

问题:

  1. 窗口A是否可以获得窗口B的引用?
  2. 什么是最优雅的方式使窗口A通知窗口B?
    (包括新的HTML5规范)

我知道这样做的两种方式:

  • 服务器消息传递:窗口B常规询问服务器窗口A是否已通知某事
  • 通过本地数据进行消息传递(HTML5):当窗口A想要通知它改变本地数据的东西时,窗口B定期检查本地数据是否有任何变化.

但这两种方式并不那么优雅.
例如,获得窗口B的引用并使用window.postMessage()(HTML5)会很不错

最终的目标是制作像facebook这样的东西,如果你打开4个Facebook标签并在一个标签中聊天,聊天是最新的每个Facebook标签,这是整洁的!

javascript html5 web-applications postmessage local-storage

69
推荐指数
3
解决办法
6万
查看次数

如何在屏幕保护程序等浏览器窗口下自动刷新多个网站页面?

如何在一个浏览器下刷新多个网站页面?

例如.我有几个内部定制设计网站,我想在我的用户的大型LCD面板中显示,类似屏幕保护程序,但这是循环通过几个网页URL在全屏窗口(F11)

谢谢.

html javascript css

4
推荐指数
1
解决办法
9717
查看次数

从另一个javascript写一个javascript文件

我有两个网页.在第一页,我必须提交一份表格.使用表单中的值(使用嵌入式javascript),我需要生成另一个javascript文件,并在下一页中使用此生成的javascript文件.如何才能做到这一点?或者有更好的方法吗?

javascript file

4
推荐指数
1
解决办法
4908
查看次数

如何在浏览器选项卡之间共享单个js资源?

例如,我想通过socket.io,longpolling等多个选项卡刷新聊天消息,无论我拥有什么...为此,我只想对所有选项卡使用单个连接。我该怎么做?我可以将公用数据存储在localStore,Cookie等...中,并且我需要某种信号量,该信号量仅将单个同步器资源分配给一个选项卡,并且在关闭该选项卡后,将其提供给另一个选项卡,依此类推。 ..那怎么可能?我想到的唯一解决方案是,通过onbeforeunload告诉localStore资源是免费的,但这并不是在所有浏览器中都有效。还有其他选择吗?

javascript long-polling local-storage socket.io single-page-application

1
推荐指数
1
解决办法
3080
查看次数