我遇到了一个问题,即Notification.requestPermission无法从ServiceWorker处理程序中触发。

有趣的是,如果尝试从浏览器控制台使用Notification.requestPermission,它可以正常工作,并且我在Chrome浏览器窗口的顶部看到了通知请求。

创建人:Notification.requestPermission().then(res => console.log(res))。但是同样会在从ServiceWorker文件执行期间向我抛出错误,例如:



那么,也许有人知道出什么问题了?我已经在SoW上看到了这些帖子:

  • Webkit notifications requestPermission function doesn't work
  • Desktop notifications allowing not working on chrome

  • 但是他们不能解决我的问题...

    我在其中使用通知的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

    否则,由于完成页面的资源加载,浏览器将不允许您请求此权限。

    07-26 09:42