BroadCast Channel() 浏览器跨标签页通信的实现方式之一

BroadCast Channel

BroadCast Channel 可以帮我们创建一个用于广播的通信频道。当所有页面都监听同一频道的消息时,其中某一个页面通过它发送的消息就会被其他所有页面收到。但是前提是同源页面。

BroadcastChannel() 构造函数用于创建一个 BroadcastChannel 对象,并与底层的通道相关联。

js 复制代码
new BroadcastChannel(channelName)

index.html

html 复制代码
<body>
    <input type="text" name="" id="content">
    <button id="btn">发送数据</button>
    <script>
        const content = document.querySelector("#content");
        const btn = document.querySelector("#btn");

        // 创建一个名字是 load 的 BroadcastChannel 对象
        var BroadcastChanne1 = new BroadcastChannel('load');

        btn.onclick = function () {
            BroadcastChanne1.postMessage({
                value: content.value
            });
        }

    </script>
</body>

index2.html

html 复制代码
<body>
    <script>
        var BroadcastChanne1 = new BroadcastChannel('load');//要接收到数据,BroadcastChannel对象的名字必须相同
        BroadcastChanne1.onmessage = function (e) {
            console.log(e.data);//发送的数据
        };
    </script>
</body>

在上面的代码中,我们在页面一注册了一个名为 loadBroadcastChannel 对象,之后所有的页面也创建同名的 BroadcastChannel 对象,然后就可以通过 postMessageonmessage 方法进行相互通信了。

相关推荐
\xin2 小时前
pikachu自编exp,xss之盲打,过滤,htmlspecialchars,href,js
前端·xss
ZC跨境爬虫2 小时前
前端实战复盘:从零完成Apple中国大陆官网UI第一阶段全量静态复刻
前端·css·ui·html
苏一恒2 小时前
MP4 在 <video> 里,必须全量下载才能起播吗?—— moov、Range 与被误解的 FastStart
前端
Java小卷2 小时前
低代码并没有过时!可拖拽表单设计器布局思路
前端·低代码
idcu2 小时前
深入 Lyt.js 响应式系统:Proxy + Signal 双模式
前端
idcu2 小时前
Vapor Mode 揭秘:无虚拟 DOM 的极致性能
前端
idcu2 小时前
从 Vue 3 到 Lyt.js:无痛迁移指南
前端
尘世壹俗人2 小时前
如何检查服务器上消耗资源的程序是那个
服务器·前端·chrome
LIO2 小时前
Vue Router 进阶:深入用法与最佳实践
前端·vue-router