您可以尝试在 Shared WebWorker 中创建 WebSocket 连接,它允许来自同一域的多个页面共享一个执行上下文。但是,尚不清楚 Shared Workers 是否在页面重新加载或替换时持续存在:Do Shared Web Workers persist over a single page reload, link navigation
此外,共享 WebWorker 目前对浏览器的支持有限 (webkit 和 Opera)。
更新:
由于单个共享 Web Worker 可以为多个页面提供服务,因此实现比普通 Web Worker 稍微复杂一些。
这是一个共享的 Web Worker 示例,它使用 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 中有效。