我想在所有标签中显示一条消息。 所以我为此使用了sharedWorker:
//sharedworker
var worker = new SharedWorker('/js/realtime.js');
worker.port.addEventListener("message", function(e) {
alert(e.data);
}, false);
worker.port.start();
// post a message to the shared web worker
worker.port.postMessage("name");
和realtime.js:
var connections = 0; // count active connections
self.addEventListener("connect", function (e) {
var port = e.ports[0];
connections++;
port.addEventListener("message", function (e) {
port.postMessage("Hello " + e.data + " (port #" + connections + ")");
}, true);
port.start();
}, true);
我想在浏览器的所有选项卡中看到警报,但这仅是一个...任何想法?
答案 0 :(得分:0)
您的port
变量引用单个标签。每次触发“ connect”事件时,您都会将另一个端口连接到另一个选项卡。因此,如果要向所有选项卡发送消息,则需要存储所有端口,然后将消息发送给所有选项卡。像这样:
const ports = [];
self.addEventListener("connect", function (e) {
ports.push(e.ports[0]);
port.addEventListener("message", function (e) {
for (var i = 0; i < ports.length; i++) {
ports[i].postMessage("Hello " + e.data + " (port #" + i + ")");
}
}, true);
port.start();
}, true);
或者,I wrote a library使您可以轻松地在共享工作程序和选项卡之间发送消息-直接将消息发送到一个选项卡,或广播到所有连接的选项卡。