我遇到了一个问题,即Notification.requestPermission
无法从ServiceWorker
处理程序中触发。
有趣的是,如果尝试从浏览器控制台使用Notification.requestPermission
,它可以正常工作,并且我在Chrome浏览器窗口的顶部看到了通知请求。
创建人:Notification.requestPermission().then(res => console.log(res))
。但是同样会在从ServiceWorker
文件执行期间向我抛出错误,例如:
那么,也许有人知道出什么问题了?我已经在SoW上看到了这些帖子:
但是他们不能解决我的问题...
我在其中使用通知的SW
push
代码部分: self.addEventListener('push', function(event) {
console.log(self.Notification, Notification.requestPermission)
self.Notification.requestPermission().then(res => console.log(res))
if (Notification.permission === 'denied') {
console.log('Permission wasn\'t granted. Allow a retry.');
return;
}
if (Notification.permission === 'default') {
console.log('The permission request was dismissed.');
return;
}
console.log('The permission request is granted!');
try {
event.waitUntil(
self.registration.showNotification(event && event.data && event.data.text() || 'Some Notification Here!')
);
} catch (e) {
throw new Error(`Error in SW: ${e}`)
}
})
最佳答案
谁在这里寻找答案很容易-在 Notification.requestPermission
阶段完成之前,您只应运行DOMContentLoaded
。
否则,由于完成页面的资源加载,浏览器将不允许您请求此权限。