Notifications API
Notifications API 用于在网页端使用系统通知功能
创建通知
ServiceWorkerRegistration 接口的 showNotification() 方法用于在对应的 Service Worker 上创建一条(系统)通知,该通知的相关操作会在对应的 Service Worker 全局上下文上触发相应的事件。
该方法接受一个字符串作为通知的标题,并接受一组配置项作为通知的选项,相关参数类似 Notification() 构造函数的选项;返回一个无参的 Promise。
浏览器环境中可以利用 navigator.serviceWorker.ready 等属性或方法获取到 ServiceWorkerRegistration 实例以创建通知。
1  | window.navigator.serviceWorker.ready.then((registration) => {  | 
Service Worker 环境可以利用 self.registration 属性获取到当前 Service Worker 对应的 ServiceWorkerRegistration 实例以创建通知。
1  | self.registration.showNotification('Hello', {  | 
如果未使用 Service Worker,可以在浏览器环境中直接使用 Notification() 构造函数来创建通知
1  | const notificaion = new Notification('notification')  | 
需要注意的是,ServiceWorker 环境内无法调用 Notification() 构造函数来创建通知。
请求通知权限
需要注意的是,创建一条 Notification 需要用户授予通知权限,可以使用 Notification.permission 属性检测用户是否授予了通知权限,并使用 Notification.requestPermission() 静态方法向用户请求通知权限。
1  | if (Notification.permission === 'granted') {  | 
获取通知
ServiceWorkerRegistration 接口的 getNotifications() 方法用于获取在对应的 Service Worker 上创建的(系统)通知。
该方法支持传入一组筛选项,其仅支持 tag 参数,以筛选返回结果的通知;该方法返回一个 Promise 的 Notification 列表
可以使用该方法获取到通知再进行修改。
1  | window.navigator.serviceWorker.ready.then((registration) => {  | 
1  | self.registration.getNotifications({  | 
通知处理
当与当前 Service Worker 对应的通知被点击时,在 Service Worker 全局触发 notificationclick 事件。
1  | self.addEventListener('notificationclick', (e) => {  | 
当与当前 Service Worker 对应的通知被关闭时,在 Service Worker 全局触发 notificationclose 事件。
1  | self.addEventListener('notificationclose', (e) => {  | 
NotificationEvent 接口继承自 ExtendableEvent 接口
notification属性代表触发事件的 Notification 实例
action顺序代表触发事件的 action 的 ID
权限 API
该 API 调用需要用户授予 notifications 权限,可以调用 Permission.query() 方法或读取 Notification.permission 属性检查用户是否已授予了该权限
示例
- https://github.com/skyclouds2001/Frontend-Learning/blob/main/next-learning/notification.html
 - https://github.com/skyclouds2001/Frontend-Learning/blob/main/next-learning/notification.js
 
类型
1  | interface NotificationAction {  | 
链接
Notifications API
https://skyclouds2001.github.io/2023/09/10/Notifications-API/

