在浏览器中打开的选项卡之间共享数据的最佳方式是什么?
JavaScript:在选项卡之间共享数据
如需更现代的解决方案,请查看https://stackoverflow.com/a/12514384/270274
引用:
我坚持使用问题中提到的共享本地数据解决方案
localStorage
。它似乎是可靠性、效率和浏览器兼容性方面的最佳解决方案。
localStorage
在所有现代浏览器中实现。
storage
当其他选项卡对 进行更改时会触发该事件localStorage
。这对于通信目的非常方便。参考:
http : //dev.w3.org/html5/webstorage/
http://dev.w3.org/html5/webstorage/#the-storage-event
如果第一个选项卡自动打开第二个选项卡,您可以执行以下操作:
第一个标签:
//open the first tab
var child_window = window.open( ...params... );
第二个标签:
// get reference to first tab
var parent_window = window.opener;
然后,您可以调用函数并在选项卡之间执行各种操作:
// copy var from child window
var var_from_child = child_window.some_var;
// call function in child window
child_window.do_something( 'with', 'these', 'params' )
// copy var from parent window
var var_from_parent = parent_window.some_var;
// call function in child window
parent_window.do_something( 'with', 'these', 'params' )
另请参阅另一个 StackOverflow 线程:浏览器选项卡/窗口之间的 Javascript 通信。
在我看来,有两种很好的方法。根据您的需要,一种可能更适合您。
如果其中任何一个是真的...
- 你不能存储信息服务器端,
- 你不能发出很多 http 请求,
- 您只想存储一点信息[1],
- 你想成为纯 javascript / 客户端,
- 您只需要它在同一浏览器中的选项卡/窗口之间工作。
-> 然后使用 cookie(setCookie 用于发送,getCookie/setTimeout 用于接收)。这样做的一个很好的图书馆是http://theprivateland.com/bncconnector/index.htm
如果其中任何一个是真的...
- 您要存储信息服务器端
- 您想存储大量信息或将其存储在相关事物中(即表格或多维数组[2])
- 您还需要它跨不同的浏览器(不仅仅是在同一浏览器中的选项卡/窗口之间)甚至不同的计算机/用户。
-> 然后使用 Comet(长期持有的 HTTP 请求允许 Web 服务器基本上将数据推送到浏览器)接收数据。以及发送数据的短 POST 请求。
Etherpad 和 Facebook Chat 目前使用 Comet 技术。
[1] 当使用 localStorage 时,显然可以存储更多数据,但是由于您会回退到 cookie,因此还不能依赖于此。除非您的应用程序仅适用于现代浏览器,否则这很好。
[2] 复杂的数据也可以存储在 cookie 中(JSON 编码),但这不是很干净(并且需要没有 JSON.stringify/JSON.parse 的浏览器的回退方法)并且在涉及并发的场景中可能会失败。无法更新 JSON cookie 值的一个属性。您必须解析它,更改一个属性并覆盖该值。这意味着理论上可以撤消另一次编辑。同样,当使用 localStorage 时,这不是一个问题。
我能想到的唯一方法:与服务器进行持续的 ajax 通信以报告其他选项卡上的任何用户操作。
如何使用 cookie 将数据存储在一个选项卡中并在另一个选项卡中轮询?我还不知道 cookie 是否在选项卡之间共享,但现在只是一个想法......