LocalStorage
通过LocalStorage存储内容,并且在改变某个tab页面后,另外一个tab页面监听变动这种方式应该大家都比较熟悉了。
监听变动的代码如下:
第二个tab页面监听如下
window.addEventListener('storage', function (e) {
if (e.key === 'ctc-msg') {
const data = JSON.parse(e.newValue);
const text = '[receive] ' + data.msg + ' —— tab ' + data.from;
console.log('[Storage I] receive message:', text);
}
});
当其他同源页面的不同tab执行如下代码时候就会出发上面的事件监听回调函数的执行
mydata.st = +(new Date);
window.localStorage.setItem('ctc-msg', JSON.stringify(mydata));
但是这种还是和存储有管理,如果单纯是用来夸tab通讯,而不是需要存储呢?
这时候浏览器的广播就有用了,安卓软件,ios软件也有同样类同的功能,这里专注浏览器的自带的广播功能。
BroadCast Channel
BroadCast Channel 可以帮我们创建一个用于广播的通信频道。当所有页面都监听同一频道的消息时,其中某一个页面通过它发送的消息就会被其他所有页面收到。它的API和用法都非常简单。
下面的方式就可以创建一个标识为hello
的频道
const bc = new BroadcastChannel('hello');
各个页面可以通过onmessage
来监听被广播的消息:
bc.onmessage = function (e) {
const data = e.data;
const text = '[receive] ' + data.msg + ' —— tab ' + data.from;
console.log('[BroadcastChannel] receive message:', text);
};
要发送消息时只需要调用实例上的postMessage
方法即可
bc.postMessage({msg:"你好呀",form:"页面1"});
浏览器支持
电脑端除了safari浏览器,其他所有现代浏览器支持都比较良好
手机端支持相对较弱,普遍是2022年后的版本软件才提供支持
完结。