JS 跨标签通信(实时)

49 篇文章 0 订阅
订阅专栏
18 篇文章 0 订阅
订阅专栏
12 篇文章 0 订阅
订阅专栏

我们在开发过程中,偶尔会遇到特殊的场景需求,用户打开俩个标签页,分别操作,并且数据要实时,这时候我们就要用到跨标签通信来解决类似的需求,总结了几种方案(同域):

一、localStorage

我们可以监听 localStorage 改变,接着实现想要的逻辑,禁止重复发送,不生效

发送端:

// 发送一个数据
localStorage.setItem('username', '张三')

监听端:

 // 监听 localstorage 变化
 window.addEventListener('storage', event => {
   console.log(event)
 })

可以看到,接收端的 localStorage 值:

在这里插入图片描述

二、webSocket

这种方式工作中常用,这里忽略跳过

三、SharedWorker

webSocket 类似,需要有一个类似 socket 服务的终端

发送端:

<button id="btn">发送消息</button>

<script>
  // 创建共享线程
  let worker = new SharedWorker('worker.js')

  // 发送消息
  document.getElementById('btn').addEventListener('click', e => {
    worker.port.postMessage(Math.random()*1000)
  })

  // 接收消息
  worker.port.onmessage = e => {
    console.log(e.data)
  }

  // 启动线程端口
  worker.port.start()
</script>

终端:

onconnect = (e) => {
  let port = e.ports[0];

  port.postMessage('connect')

  port.addEventListener('message', e => {
    port.postMessage(`handler data:${parseInt(e.data)}`)
  })

  port.start()
};

通过 chrome://inspect/#workers 可查看终端的输出,点击 inspect 查看,可以看到终端处理数据后返回,并且支持群发,感兴趣的小伙伴可以去研究

在这里插入图片描述
在这里插入图片描述
附兼容性表:
在这里插入图片描述

四、postMessage

发送端:

<button id="btn">发送消息</button>

<script>
  let device = window.open('http://localhost:63342/signal_communication/postMessage/receive.html')

  document.getElementById('btn').addEventListener('click', event => {
    device.postMessage('发送一条消息')
  })
</script>

接收端:

<script>
  window.addEventListener('message', event => {
    console.log(event)
  })
</script>

在这里插入图片描述

五、BroadcastChannel

发送端:

<button id="btn">发送消息</button>

<script>
  let device = new BroadcastChannel('username')

  document.getElementById('btn').addEventListener('click', event => {
    device.postMessage('张三')
  })
</script>

接收端:

<script>
  let device = new BroadcastChannel('username')

  device.onmessage = event => {
    console.log(event)
  }
</script>

在这里插入图片描述

六、‘cookie + setInterval’:

这种就不说了,定时器轮询即可

AcrossTabs简单的源浏览器标签之间的通信
08-12
AcrossTabs - 简单的源浏览器标签之间的通信
前端浏览器标签通信方式分享
dfc_dfc的博客
04-14 940
浏览器标签通信分享
前端标签通信常见方案
最新发布
weixin_48363291的博客
04-23 1070
标签通信常见方案
js关于通信的一些方案
BelongPanda的博客
03-28 367
在上面列举了几种前端通信的方式,当然还有其他的一些方案,例如:使用 hashchange、indexDB、Websocket 都是可以的,当前只是列举了部分。对于同源面,常见的方式包括:广播模式:Broadcast Channel / Service Worker / LocalStorage + StorageEvent共享存储模式:Shared Worker / IndexedDB / cookie口口相传模式:window.open + window.opener。
JS 标签或窗口通信
qq_41742576的博客
05-25 593
5、存储数据类型只能是字符串,引用类型会转化为相应的数据类型,比如对象存储的是[object Object];2、数据大小有限制,与localStorage有关,不同的浏览器不一样,一般5M;3、只能旧的窗口发送信息,新窗口接受信息;2、后端可以控制是否对哪一个设备发送消息;3、发送信息的窗口不会触发监听事件;1、兼容性低,与worker类似;1、需要前后端需要一直保持通讯;4、只有数据改变了才能监听到;1、对数据类型传输没有限制;2、对数据类型传输无限制;1、必须同域,不可域;1、发送窗口也能监听到;
js 浏览器tab通信
wangjun5159的专栏
02-23 2711
tab通信 今天遇到一个问题,订单列表面,新开了一个新增订单的tab,新增完后,订单列表要即时显示,这就是tab(tab、window、frame、iframe)通信,注意tab、window窗口、frame、iframe都属于tab范畴,同源下,可使用BroadCastChannel解决此问题。(https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API) // If it is the first to co
JavaScript实现标签通信
Mr_linjw的专栏
10-07 270
是 H5 引入的 API,该方法允许来自不同源的脚本采用异步方式进行有效的通信,可以实现文本文档、多窗口、域消息传递,多用于窗口间数据通信,这也使它成为通信的一种有效的解决方案。结合 window.addEventListener('storage', cb) 完成 A、B 标签通信。它允许同一来源的不同文档(在不同窗口、选项卡、框架或 iframe 中)之间进行通信。表示一个命名频道,给定。
了解JS三种实时通信方式——Eventsource、websocket与socket.io之间的差异和优缺点
weixin_42508580的博客
05-29 9867
它是 WebSockets 的替代方案,因为它比 WebSockets 更简单,更适合处理服务器向客户端发送数据的情况。是一种在单个 TCP 连接上提供全双工通信的协议,它使得客户端和服务器之间进行实时交互变得更加容易。它是一种标准化的通信协议,客户端和服务器都可以通过它发送消息。和其他实时通信协议,并提供了一组易于使用的 API。它既可以在客户端上使用,也可以在服务器端上使用,它还提供了许多高级功能,例如自动重连、心跳机制和房间等概念。,只有服务器能够发送消息,所以它更安全。
js中多个面之间如何进行通信?有什么区别?
子玉的博客
11-08 336
使用PostMessage API:如果你的面是通过iframe嵌套在另一个面中,或者是由同一域名下的不同面组成,你可以使用PostMessage API来进行通信。通过服务器进行通信:如果需要在不同面之间进行实时通信或共享数据,可以通过服务器端建立一个后端服务,并让不同面通过WebSocket或AJAX等技术与后端进行通信,从而实现面之间的数据交换。- 优点:可以在同一浏览器的不同面之间共享数据,支持存储较大量的数据,并且相对安全。
【NuxtJs】 如何实现浏览器内多个标签之间的通信 ?(阿里)
Write less,do more
02-14 918
如何实现浏览器内多个标签之间的通信 ? (阿里)一:简介二:WebSocket、SharedWorker;三 :localstorge、cookies 等本地存储方式;四:面可见性(Page Visibility API) 可以有哪些用途 ?五、document.visibilityState六、面卸载 一:简介 做支付会遇到的问题 有时候,开发者需要知道,用户正在离开面。常用的方法是监听下面三个事件。 pagehide beforeunload unload 二:WebSocket、Share
tabHub:轻松的浏览器选项卡进行通信
05-02
一个标签发出事件,收到其他标签 提醒:此项目需要jquery ! 用法 var hub = tabHub ( 'event1' , function ( emit ) { // this callback will no longer be fired if other tab already fired this $ . get ( '/...
HTML5+CSS3+JavaScript
05-28
本书是一本介绍HTML 5、CSS 3和JavaScript开发的实用图书。全书可分 为4个部分。 第一部分:全面地介绍了HTML 5的全部标签,并且详细地介绍了...应用、多线程、文档消息通信、WebSocket编程等知识,这些内容既覆盖了
JavaScript库ChannelPlate.zip
07-16
ChannelPlate 是一个在文档通信(MessageChannel) 中用来发送消息的 JavaScript 库。覆盖了从 W3C 到 Chrome 浏览器扩展中的文档通信接口,通常用于这几种情况下:  1) 共用构造函数  2) 统一 API 接口 3...
JavaScript 复制功能代码 兼容多浏览器(ZeroClipboard)
02-26
IE 的 Flash JavaScript 通信接口上有一个 bug 。你必须插入一个 object 标签到一个已存在的 DOM 元素中。并且在写入 innerHTML 之前请确保该元素已经 appendChild 方法插入到 DOM 中。 Zero Clipboard 事件处理 ...
第20章 JavaScript通信
唯美清泠
11-16 1116
第20章 JavaScript通信 在传统Web开发中,客户端与服务器端通信主要通过同步请求(面刷新)来实现,当客户端向服务器端发出HTTP请求之后,服务器端接收并处理这个请求,然后响应完整的Web面给客户端。这样当发出请求之后,用户就需要慢慢等待,直到服务器响应完毕。如果同步交互的信息和次数很多,这中间就会有大量无用,或者重复性数据挤占带宽。 Ajax完全摒弃了这种信息交互方式,它通过在客户端嵌入一个中间件(XMLHttpRequest组件),并专门负责客户端与服务器端通信,这样就不需要刷新面,
web开发,使用JS在多个面、多个标签面之间相互通信与调用
weixin_30423977的博客
07-13 837
GitHub:https://github.com/roomanl/eventJS 这几天做一个web项目有这样一个需求,web项目是一个后台管理系统,在使用系统时会打开很多标签,每个标签就是一个iframe打开的一个新的html面,现在需要在每个标签之间互相通信、互相调用方法。例如:打开了A,B,C三个标签,我在C面把数据修改了,我要通知A,B两个面的数据也要更新到最新修改的数据...
标签之间的通信
拯救世界的光太郎
11-18 1584
解决方案、解决方案。
如何实现浏览器内多个标签之间的通信
jewfer的博客
02-12 4018
浏览器内多个标签之间通信,通俗的讲就是浏览器中开了多个窗口,在其中一个窗口做了一些行为等其他窗口不用刷新也能有相关表现。 cookie+setInterval方式 要想在多个窗口中通信通信的内容一定不能放在window对象中,因为window是当前窗口的作用域,里面的内容只属于当前窗口。而cookie是浏览器的本地存储机制,和窗口无关。 将要发送的信息写入cookie: var msg = documet.querySelector('#msg'); if(msg.value.trim()
java按钮触发另一个面_前端通信,你知道哪些方法?
weixin_39948309的博客
11-24 883
戳蓝字「前端技术优选」关注我们哦!引言在浏览器中,我们可以同时打开多个Tab,每个Tab可以粗略理解为一个“独立”的运行环境,即使是全局对象也不会在多个Tab间共享。然而有些时候,我们希望能在这些“独立”的Tab面之间同步面的数据、信息或状态。正如下面这个例子:我在列表点击“收藏”后,对应的详情按钮会自动更新为“已收藏”状态;类似的,在详情点击“收藏”后,列表中按钮也会...
js向整个浏览器发送消息,其它标签域名可以接收该消息
07-15
在浏览器中,如果你希望从一个标签发送消息给其它标签标签通信),你可以使用 Broadcast Channel API。该 API 可以通过不同标签之间共享同一个频道来实现消息的传递。以下是一个简单的示例: 在发送...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 浏览器扩展插件:「油猴」使用详解 ( Tampermonkey ) 80668
  • React-router 页面跳转的三种方式 27418
  • 关于echarts加载重绘问题 14232
  • Node.js 解析request.body请求体参数 11442
  • vue选择时间日期日历插件 : vuejs-date-calendar 10058

分类专栏

  • Vue 28篇
  • Linux 5篇
  • Electron 3篇
  • Javascript 49篇
  • 浏览器 12篇
  • Node.js 14篇
  • Vite 4篇
  • Typescript 2篇
  • React 15篇
  • Html / CSS 18篇
  • 黑科技 1篇
  • 前端技能 13篇
  • 调试小技巧 6篇
  • Webpack 11篇
  • 微信公众号 1篇
  • SEO优化 1篇

最新评论

  • Mysql root用户远程连接失败解决方案

    蹋雾: 博主好文,支持,期待下一篇

  • Linux arm架构下构建Electron安装包

    前端小小白zyw: ruby 版本不对,太低了,3.0以上才行

  • Linux arm架构下构建Electron安装包

    KevinKuang_: sudo gem install fpm一直失败: ERROR: Error installing fpm: The last version of dotenv (>= 0) to support your Ruby & RubyGems was 2.8.1. Try installing it with `gem install dotenv -v 2.8.1` and then running the current command again dotenv requires Ruby version >= 3.0. The current ruby version is 2.5.0.

  • JS 事件捕获、事件冒泡、事件委托

    Miracle_86.: 十年铸剑,只为炉火纯青;一朝出鞘,定当倚天长鸣。

  • JS利用Worker多线程大文件切片上传

    前端小小白zyw: 可以,我还没有在框架中使用过此功能,你的经验很棒表情包

最新文章

  • Mysql root用户远程连接失败解决方案
  • JS 事件捕获、事件冒泡、事件委托
  • JS实现chatgpt数据流式回复效果
2024年10篇
2023年20篇
2022年7篇
2020年28篇
2019年44篇
2018年8篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端小小白zyw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司盐城网站制作宁波网站制作设计多少钱济宁关键词按天计费哪家好潍坊百搜标王公司海西企业网站制作报价萍乡网站设计模板报价阿里设计网站推荐张北网站改版多少钱天门百度爱采购公司天门模板制作黑河至尊标王报价南宁百度seo价格南昌网络广告推广报价平顶山高端网站设计哪家好木棉湾企业网站设计昭通优秀网站设计多少钱北京外贸网站制作报价民治百度竞价公司兰州网站推广方案推荐营口模板制作推荐马鞍山网站seo优化玉溪网络推广多少钱延安百度标王公司内江网站优化按天扣费多少钱北海网站seo优化推荐大运网站建设公司庆阳网络广告推广价格阳泉网站优化排名报价思茅百度seo兴安盟SEO按天收费价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化