javascript - 通过 webworker 创建通知
在关于通知的文章中,Mozilla 说:
注意:此功能在 Web Worker 中可用。
可以创建没有任何警告的工作线程
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
你做错了什么。我在 web workers 中运行通知时完全没有问题。
这段代码在 jsfiddle 上运行得非常完美:
工人示例SharedWorker示例
请尝试以下代码:
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.
}
}
}
在网页工作者中,控制台对我来说也相当好用。
