bri*_*out 31
有关更现代的解决方案,请访问/sf/answers/876006911/
引用:
我坚持使用问题中提到的共享本地数据解决方案
localStorage
.它似乎是可靠性,效率和浏览器兼容性方面的最佳解决方案.
localStorage
在所有现代浏览器中实现.
storage
当其他选项卡进行更改时,事件将触发localStorage
.这对于通信目的非常方便.参考:
http://dev.w3.org/html5/webstorage/
http://dev.w3.org/html5/webstorage/#the-storage-event
spu*_*dly 12
如果第一个选项卡自动打开第二个选项卡,您可以执行以下操作:
第一个标签:
//open the first tab
var child_window = window.open( ...params... );
Run Code Online (Sandbox Code Playgroud)
第二个标签:
// get reference to first tab
var parent_window = window.opener;
Run Code Online (Sandbox Code Playgroud)
然后,您可以调用函数并在选项卡之间执行各种操作:
// 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' )
Run Code Online (Sandbox Code Playgroud)
BroadcastChannel 标准允许这样做。请参阅MDN 广播频道
// Connection to a broadcast channel
const bc = new BroadcastChannel('test_channel');
// Example of sending of a very simple message
bc.postMessage('This is a test message.');
// A handler that only logs the event to the console:
bc.onmessage = function (ev) { console.log(ev); }
// Disconnect the channel
bc.close();
Run Code Online (Sandbox Code Playgroud)
另请参阅另一个 StackOverflow 线程:浏览器选项卡/窗口之间的 Javascript 通信。
我认为有两种好的方法。根据您的需要,一种可能更适合您。
如果其中任何一个是真的......
-> 然后使用cookie(发送时使用setCookie,接收时使用getCookie/setTimeout)。一个很好的库可以做到这一点是http://theprivateland.com/bncconnector/index.htm
如果其中任何一个是真的......
-> 然后使用 Comet(长期持有的 HTTP 请求允许 Web 服务器基本上将数据推送到浏览器)来接收数据。以及发送数据的简短 POST 请求。
Etherpad 和 Facebook Chat 目前使用 Comet 技术。
[1] 当使用 localStorage 时,显然可以存储更多数据,但由于您会依赖 cookie,因此还不能依赖于此。除非您的应用程序仅适用于现代浏览器,否则这就可以了。
[2] 复杂的数据也可以存储在 cookie 中(JSON 编码),但这不是很干净(并且需要没有 JSON.stringify/JSON.parse 的浏览器的回退方法),并且在涉及并发的场景中可能会失败。无法更新 JSON cookie 值的一个属性。您必须解析它,更改一个属性并覆盖该值。这意味着理论上可以撤消另一次编辑。同样,当使用 localStorage 时,这就不是什么问题了。
归档时间: |
|
查看次数: |
47844 次 |
最近记录: |