跨标签页解决方法

阅读时长 4 分钟读完

在 Web 开发中,我们经常会遇到需要在不同的浏览器标签页之间共享数据或者通信的需求。例如,在多个标签页中共享用户登录状态、在一个标签页中发送消息并在另一个标签页中接收等等。然而,由于浏览器的安全机制和同源策略,直接在不同标签页之间进行通信是被禁止的。那么,有哪些跨标签页的解决方法呢?

1. 使用 localStorage 或 sessionStorage

localStorage 和 sessionStorage 都属于 Web Storage API,用于在浏览器中存储键值对。它们的差别在于:

  • localStorage 存储的数据没有过期时间限制,除非手动清除;
  • sessionStorage 存储的数据在关闭浏览器窗口时会被自动删除。

由于 localStorage 和 sessionStorage 存储的数据可以跨标签页共享,我们可以在一个标签页中将数据存储到 localStorage 或 sessionStorage 中,另一个标签页再从中读取。下面是示例代码:

存储数据

读取数据

监听数据变化

由于 localStorage 和 sessionStorage 存储的数据可以被其他标签页修改,我们需要在当前标签页中监听它们的变化。下面是示例代码:

2. 使用 Broadcast Channel API

Broadcast Channel API 是一个 HTML5 标准,用于在不同的浏览器上下文(包括不同窗口、标签页和 iframe)之间建立即时通信通道。通过 Broadcast Channel API,我们可以向所有订阅同一频道的浏览器上下文发送消息,并接收来自其它浏览器上下文的消息。下面是示例代码:

创建广播频道

发送消息

接收消息

3. 使用 SharedWorker API

SharedWorker API 可以让多个浏览器上下文之间共享一个 Worker 线程,从而实现跨标签页通信。与 Broadcast Channel API 不同的是,SharedWorker API 需要在一个独立的 JavaScript 文件中创建 Worker 实例,并且可以通过 postMessage 方法向 Worker 发送消息,并通过 onmessage 事件监听 Worker 回复的消息。下面是示例代码:

创建 SharedWorker

给 SharedWorker 发送消息

接收来自 SharedWorker 的消息

总结

本文介绍了三种常用的跨标签页解决方法:使用 localStorage 或 sessionStorage、使用 Broadcast

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/71407

纠错
反馈