网友回复
主要有以下几种:
1、BroadCast Channel
// 创建 Broadcast Channel 对象 const channel = new BroadcastChannel('my_channel'); // 发送消息 channel.postMessage({message: 'Hello, world!'}); //在页面2中: // 创建 Broadcast Channel 对象 const channel = new BroadcastChannel('my_channel'); // 接收消息 channel.addEventListener('message', function(event) { console.log('收到消息:', event.data); });
2、Service Worker
// 注册 Service Worker if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/sw.js').then(function(registration) { console.log('Service Worker 注册成功:', registration.scope); }).catch(function(error) { console.log('Service Worker 注册失败:', error); }); } // 在 Service Worker 中添加消息监听 self.addEventListener('message', function(event) { console.log('Service Worker 接收到消息:', event.data); // 向其他标签页发送消息 clients.matchAll({type: 'window'}).then(function(clients) { clients.forEach(function(client) { client.postMessage(event.data); }); }); }); // 在标签页中添加消息监听 navigator.serviceWorker.addEventListener('message', function(event) { console.log('标签页接收到消息:', event.data); }); // 在标签页中发送消息给 Service Worker navigator.serviceWorker.controller.postMessage('Hello, Service Worker!');
3、LocalStorage window.onstorage 监听
// 存储数据到LocalStorage localStorage.setItem('my_key', 'my_value'); // 监听LocalStorage变化 window.addEventListener('storage', function(event) { console.log('LocalStorage变化:', event.key, event.newValue); }); //在页面B中: // 更新LocalStorage中的数据 localStorage.setItem('my_key', 'new_value');
4、Shared Worker 定时器轮询(setInterval
在 Shared Worker 中worker.js:
let timerId = null; function startPolling() { timerId = setInterval(function() { console.log('轮询任务'); }, 1000); } function stopPolling() { clearInterval(timerId); } self.addEventListener('connect', function(event) { const port = event.ports[0]; // 监听消息 port.addEventListener('message', function(event) { if (event.data === 'start') { startPolling(); } else if (event.data === 'stop') { stopPolling(); } });...
点击查看剩余70%
如何编写一个chrome插件实现多线程高速下载大文件?
cdn版本的vue在网页中出现typeerror错误无法找到错误代码位置怎么办?
pywebview能否使用webrtc远程控制共享桌面和摄像头?
pywebview6.0如何让窗体接受拖拽文件获取真实的文件路径?
如何在linux系统中同时能安装运行apk的安卓应用?
python有没有离线验证码识别ocr库?
各家的ai图生视频及文生视频的api价格谁最便宜?
openai、gemini、qwen3-vl、Doubao-Seed-1.6在ui截图视觉定位这款哪家更强更准?
如何在linux上创建一个沙箱隔离的目录让python使用?
pywebview如何使用浏览器自带语音识别与webspeech 的api?