React Academy · 课时

Notifications API 与权限处理

在适当时机请求通知权限,并从 React 发送浏览器通知

第 3 / 4 课13 个步骤

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 反馈 — 无需本地设置。

此课程中的所有课时

  1. Clipboard API:在 React 中复制和粘贴
  2. React 组件中的 Geolocation API
  3. Notifications API 与权限处理
  4. 使用 IntersectionObserver 实现滚动触发效果
← 返回 React Academy