html5中sharedWorker实现多页面通信的示例代码
SharedWorker 是 HTML5 引入的一种多线程机制,它允许多个同源页面共享一个 worker 线程。这使得不同页面之间可以进行通信,实现诸如共享数据、同步状态等功能。
1. 创建 SharedWorker (worker.js)
JavaScript
// worker.js
let count = 0;
self.addEventListener('connect', (e) => {
const port = e.ports[0];
port.onmessage = (e) => {
if (e.data === 'increment') {
count++;
port.postMessage(count);
} else if (e.data === 'decrement') {
count--;
port.postMessage(count);
}
};
});
2. 页面1 (page1.html)
HTML
<!DOCTYPE html>
<html>
<head>
<title>Page 1</title>
</head>
<body>
<button onclick="increment()">+1</button>
<div id="count"></div>
<script>
const worker = new SharedWorker('worker.js');
worker.port.onmessage = (e) => {
document.getElementById('count').textContent = e.data;
};
function increment() {
worker.port.postMessage('increment');
}
</script>
</body>
</html>
3. 页面2 (page2.html)
HTML
<!DOCTYPE html>
<html>
<head>
<title>Page 2</title>
</head>
<body>
<button onclick="decrement()">-1</button>
<div id="count"></div>
<script>
const worker = new SharedWorker('worker.js');
worker.port.onmessage = (e) => {
document.getElementById('count').textContent = e.data;
};
function decrement() {
worker.port.postMessage('decrement');
}
</script>
</body>
</html>
worker.js:
count
。connect
事件,获取到 port
对象。port
对象用于与页面进行通信。当页面发送消息时,worker 根据消息类型对计数器进行增减操作,并把新的计数器值发送回页面。page1.html 和 page2.html:
SharedWorker 提供了一种方便的方式来实现多个页面之间的通信。通过共享一个 worker 线程,可以实现数据的同步、状态的共享等功能。在实际应用中,SharedWorker 可以帮助我们构建更复杂的 Web 应用。
更多深入学习,可以参考以下资源:
如果你有其他问题,欢迎随时提问。
你可以提出以下问题: