onchange 事件不适用于 Firefox 软件中的通知权限

onchange event not working for notifications permission in SW for firefox

我最近为我们的 Web 应用程序添加了一个通知部分,它在 chrome 和 Opera 上运行良好,但对于 Firefox,最初,我收到一条错误消息:

The Notification permission may only be requested from inside a short running user-generated event handler.

所以,我添加了一个按钮来授予通知权限,现在我发现有一个更大的错误; navigator.permissions 的 'onchange' 事件在获得用户许可后无法激活通知。这是我的代码:

self.addEventListener('activate', async () => { 
   if ('permissions' in navigator) { // inside of this if not executing on firefox
       navigator.permissions.query({ name: 'notifications' }).then(function (permissionStatus) {
           permissionStatus.onchange = function () {
            // do thing in here...
           };
      });
   }
   //...
});

虽然我知道 'window' 是 js 文件中的默认变量,但我也尝试了 'window.navigator' 而不是 'navigator' 并且没有任何改变。

最后,我发现由于我们是手动触发请求权限并通过单击按钮,因此 firefox 机制不同,我们应该根据权限请求承诺执行 onchange 操作,如下所示:

      Notification.requestPermission()
     .then(async result => {
        if (result === 'granted') {
           // subscribe and do stuff in here...
        }
     })
     .catch(err => {
        console.log('Error: ', err);
     });

您仍然可以对其他浏览器使用解释的 onchange 方法,例如 chrome。