您可以尝试在 Shared WebWorker 中创建 WebSocket 连接,该连接允许来自同一域的多个页面共享执行上下文。但是,尚不清楚 Shared Workers 是否在页面重新加载或替换时持续存在:Do Shared Web Workers 在单个页面重新加载时持续存在,链接导航
此外,Shared WebWorkers 目前对浏览器的支持有限 (webkit 和 Opera)。
更新:
由于单个共享网络工作者可以服务多个页面,因此实现比普通网络工作者稍微复杂一些。
这是一个使用 WebSockets 并且可以在
首先是 HTML:
<!DOCTYPE html>
<html>
<body>
<script>
var worker = new SharedWorker("shared.js");
worker.port.addEventListener("message", function(e) {
console.log("Got message: " + e.data);
}, false);
worker.port.start();
worker.port.postMessage("start");
</script>
</body>
</html>
实现共享工作者的Javascript shared.js
:
var ws = null
var url = "ws://" + location.hostname + ":6080"
self.addEventListener("connect", function(e) {
var port = e.ports[0]
port.addEventListener("message", function(e) {
if (e.data === "start") {
if (ws === null) {
ws = new WebSocket(url);
port.postMessage("started connection to " + url);
} else {
port.postMessage("reusing connection to " + url);
}
}
}, false);
port.start();
}, false);
我已经验证这在 Chrome 52 中有效。