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。
我最近为我们的 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。