由webworker创建通知

时间:2016-01-15 12:57:06

标签: javascript browser notifications web-worker

article about notifications Mozzila说:

  

注意:此功能在Web Workers中可用。

可以在没有任何警告的情况下创建工作人员

var worker = new SharedWorker('scripts/worker.js');

但是当我尝试在共享工作者中执行此操作时:

var notification = new Notification("Hi there!");

它不起作用。 Webworker工作正常,它执行XMLHttpRequest,它可以从主线程读取数据并将消息推送给它,但不会显示通知。我无法调试它因为webworker中的控制台不可用。在主线程中授予了权限,此处也提供了通知。

如果重要,我使用Chrome 47.0.2526.111 m进行开发和调试。我注意到即使FB标签关闭,Facebook也会调用通知,所以我试图实现类似的东西。

1 个答案:

答案 0 :(得分:3)

你做错了什么。我绝对没有问题在网络工作者中运行通知。

此代码在jsfiddle上完美运行:

请尝试以下代码:

main.js

var worker = new SharedWorker("worker.js");
worker.port.start();    
Notification.requestPermission(function (permission) {
  // If the user accepts, let's create a notification
  if (permission === "granted") {
    worker.port.postMessage({name:"notification"});
  }
});

worker.js

function workerFN() {
  function onmessage(e) {
    switch(e.data.name) {
      case "notification" : 
        console.log("Notification:");
        var notification = new Notification("Hi there!");
      break;
      default:
        console.error("Unknown message:", e.data.name);
    }
  }
  self.onconnect = function(e) {
      for(var i=0,l=e.ports.length; i<l; i++) {
        e.ports[i].addEventListener('message', onmessage);
        e.ports[i].start(); // Required when using addEventListener. Otherwise called implicitly by onmessage setter.
      }
  }
}

在网络工作者中,控制台也能很好地适用于我。