我想在 https://developer.mozilla.org/en-US/docs/Web/API/Notification/permission 浏览器属性更改时触发更新。但是,我不确定如何执行此操作,因为 Notification.permission
是静态的。
即使我更改了浏览器的 notifications 权限,以下内容也不会向控制台打印任何内容:
function MyComponent() {
console.log(Notification.permission);
return <MoreGreatStuff />
}
回答1
有不同的选项来检查权限
已授予:用户已明确授予当前源显示系统 notifications 的权限。 denied:用户已明确拒绝当前来源显示系统 notifications 的权限。默认值:用户决策未知;在这种情况下,应用程序的行为就像许可被拒绝一样。
你必须这样检查,
(Notification.permission === "granted") {
// If it's okay let's create a notification
var notification = new Notification("Hi there!");
}
回答2
用https://stackoverflow.com/questions/35217959/how-to-listen-for-web-notification-permission-change回答了我自己的问题
权限状态更新可以通过 navigator.permissions.query
要点:
const [permissionState, setPermissionState] = useState()
...
navigator.permissions
.query({ name: 'notifications' })
.then(permission => setPermissionState(permission.state)
permissionState
的消费者将在更新时重新呈现。
这给了你一个 https://developer.mozilla.org/en-US/docs/Web/API/PermissionStatus/state 而不是一个 https://developer.mozilla.org/en-US/docs/Web/API/Notification/permission,但是 pish posh 它accpmolishes 同样的事情