Notifications API 与权限处理
在适当时机请求通知权限,并从 React 发送浏览器通知
Notifications API 与权限处理 是 CoddyKit 上的免费 React Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 React Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 React Academy 课程共包含 4 节课。
Notification.permission 属性
Notification.permission 是一个反映当前权限状态的静态字符串。它可以是 "granted"(用户已允许)、"denied"(用户已阻止)或 "default"(从未询问)。尝试显示通知之前,请检查此属性,以避免不必要的错误。
请求权限
Notification.requestPermission() 返回一个承诺对象,其解析结果是新的权限字符串。请只在明确的用户操作响应中调用它,而不要在页面加载时调用。浏览器会忽略或抑制页面刚加载时立即出现的权限提示;如果提示在没有上下文的情况下出现,用户也会觉得很烦。
最佳实践:在用户操作时请求
最有效的模式是先显示一条应用内提示,说明启用通知的好处,然后让用户点击“启用通知”,再调用 requestPermission()。这样可以提供必要的上下文、提高接受率,并避免浏览器将您的网站标记为垃圾网站。绝不要在页面加载时请求权限。
创建通知
new Notification(title, options) 会创建并显示系统通知。第一个参数是标题字符串。第二个参数是 options 对象,它接受 body(副标题文本)、icon(图片网址)和用于去重的 tag 等属性。只有在权限为 "granted" 时,这种方式才有效。
通知选项
重要的通知选项包括:body 用于显示标题下方的描述文本,icon 用于显示小图片,badge 用于显示在 OS 通知区域中的小型单色图标,image 用于显示大型内嵌图片,tag 用于使用相同标签替换之前的通知,以及 requireInteraction: true 用于让通知一直保留,直到用户进行操作。
通知事件
Notification 实例会触发多个事件:用户点击通知时触发 onclick(可用于聚焦窗口并进行导航),通知被关闭时触发 onclose,创建通知出现问题时触发 onerror。调用 new Notification() 后,请为返回的实例附加处理函数。
以编程方式关闭通知
将返回的 Notification 实例存储在一个变量中,然后调用 notification.close() 以通过程序将其关闭。这对于在一段时间后变得无关紧要的时效性通知很有用。将它与 setTimeout 结合使用,可以在几秒后自动关闭通知。
通知的 HTTPS 要求
通知接口要求使用安全上下文。在 HTTP 页面上,根据浏览器的不同,typeof Notification === 'undefined' 可能成立,或者该接口可能会被完全禁用。这是一项安全措施,用于防止恶意网站向用户大量发送虚假的系统消息。使用前请始终检查接口是否可用。
构建 useNotifications 钩子
useNotifications 钩子可以提供两个方法:requestPermission() 和 showNotification(title, options)。它会在内部跟踪当前权限状态,并在请求权限后更新该状态。组件可以直接调用 showNotification,无需担心权限检查,因为钩子会在内部处理这些工作。
结合可见性接口
页面可见性接口提供了 document.hidden 和 visibilitychange 事件。当用户没有正在查看标签页时,通知最有意义。显示通知前请检查 document.hidden === true,这样可以避免页面已经位于前台时发出重复提醒。
服务工作线程和推送通知
这里介绍的通知接口用于从页面自身触发本地通知。若要让推送通知在页面关闭时也能到达,您需要将推送接口与服务工作线程结合使用。服务工作线程会接收推送事件,并在后台调用 self.registration.showNotification()。
Notification.permission 的值
以下哪一项 NOT 属于 Notification.permission 的有效值?
课程回顾:通知接口
Notification.permission 可以是 granted、denied 或 default。始终在用户操作时请求权限,而不要在页面加载时请求。使用 new Notification(title, options) 创建通知,并处理 onclick 以聚焦窗口。将其与可见性接口结合,只在标签页隐藏时显示通知。
用 AI 导师学习 React — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 88
- 课程
- 324
常见问题解答
「Notifications API 与权限处理」课时是免费的吗?
是的 — 「Notifications API 与权限处理」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 React Academy 课程的其余内容,请升级到 CoddyKit PRO。 React Academy 课程共包含 4 节课。
「Notifications API 与权限处理」这节课中我会学到什么?
在适当时机请求通知权限,并从 React 发送浏览器通知 你通过在浏览器中直接运行的动手代码来练习 React Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 React Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 React Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「Notifications API 与权限处理」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 React Academy 课中编写并运行代码吗?
能。每节 React Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Clipboard API:在 React 中复制和粘贴
- React 组件中的 Geolocation API
- Notifications API 与权限处理
- 使用 IntersectionObserver 实现滚动触发效果