多个页面如何在SharedWorker中侦听消息并同时刷新页面?

时间:2019-07-30 02:30:30

标签: javascript web-worker postmessage

我正在创建两个共享同一SharedWorker的页面,并且每个页面都有一个add按钮,用于postMessage到SharedWorker,每个页面都有来自SharedWorker的计数。

如何通过单击另一个页面的按钮来刷新页面?

这是我的工作的简单演示,两个页面都在public.js上运行:

public.js:

function refresh(a) {
  // <p id="count"></p>
  if (count) {
    count.innerText = a || 1
  }
}
var myWorker = new SharedWorker("worker.js");
myWorker.port.onmessage = function(e) {
  refresh(e.data)
}

function add() {
  myWorker.port.postMessage('add');
}

function getVal() {
  myWorker.port.postMessage('get')
}
getVal()

worker.js:

var a = 1
onconnect = function(e) {
  var port = e.ports[0];

  port.onmessage = function(e) {
    switch (e.data) {
      case 'add': {
        a += 1
        port.postMessage(a)
        break
      }
      case 'get': {
        port.postMessage(a)
        break
      }
    }
  }
}

当我运行这些页面并单击一个按钮时,另一页面的计数仍然是旧的,我希望它可以自动刷新,因为两个页面都已听过myWorker.port.onmessage

0 个答案:

没有答案
相关问题