ServiceWorker 执行文件中未定义Notification.requestPermission。铬合金

Max*_*vis 6 javascript browser google-chrome service-worker

我遇到了一个问题,Notification.requestPermission我的处理程序不会触发ServiceWorker

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

经过:Notification.requestPermission().then(res => console.log(res))。但在从文件执行期间同样会引发错误ServiceWorker,例如:

未捕获的类型错误:self.Notification.requestPermission 不是函数

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

  1. Webkit 通知 requestPermission 函数不起作用

  2. 桌面通知不允许在 Chrome 上运行

但他们并没有解决我的问题......

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}`)
    }
  })
Run Code Online (Sandbox Code Playgroud)

Max*_*vis 2

对于那些在这里寻找答案的人来说,这很简单 - 您Notification.requestPermission 只能 在阶段完成之前运行。 DOMContentLoaded

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