JavaScript 通知 API:桌面通知的实现与权限管理

首先检查并请求通知权限,再创建含标题、正文和图标的桌面通知,支持点击跳转与事件监听,同时需持久化处理权限状态并为旧浏览器提供降级方案。

在现代网页应用中,向用户推送实时信息是提升体验的重要方式。JavaScript 通知 API 提供了一种直接在用户桌面显示消息的能力,适用于聊天提醒、任务完成提示等场景。要实现这一功能,关键在于正确调用 API 并妥善管理权限。

请求与检查通知权限

使用通知前必须获取用户授权。浏览器不会默认允许网页发送通知,需通过 Notification.requestPermission() 主动请求。该方法返回一个 Promise,解析结果为 'granted'、'denied' 或 'default'。

示例代码:
  • if (Notification.permission === 'granted') {
  •   new Notification('已开启通知');
  • } else if (Notification.permission !== 'denied') {
  •   Notification.requestPermission().then(permission => {
  •     if (permission === 'granted') {
  •       new Notification('欢迎启用通知');
  •     }
  •   });
  • }

建议在用户有明确交互(如点击按钮)时再发起请求,避免弹出时机不当导致用户拒绝。

创建桌面通知

当权限被授予后,可通过 new Notification(title, options) 显示通知。title 为必填字符串,options 可设置图标、正文、声音等。

常用配置项:
  • body:通知正文内容
  • icon:显示在通知中的小图标路径
  • tag:用于去重或更新已有通知
  • data:附加数据,可在事件回调中读取

例如:

new Notification('新消息', {
body: '您有一条未读私信',
icon: '/img/icon.png'
});

处理用户交互与事件监听

通知对象支持监听点击、关闭等行为,可用于跳转页面或记录行为。

  • const notification = new Notification('点击查看');
    notification.onclick = () => {
      window.focus();
      notification.close();
    };

还可监听 onshow 和 onerror 事件,增强反馈控制。注意某些操作(如自动关闭)可能受浏览器策略限制。

权限状态的持久化与降级处理

Notification.permission 的值不会随页面刷新丢失,但用户可在浏览器设置中随时更改。因此每次触发通知前都应重新检查权限。

若权限被拒绝,不应频繁请求,可引导用户手动开启。也可提供开关控件,让用户自行决定是否接收通知。

对于不支持通知 API 的旧浏览器,可通过特性检测进行降级:

if ('Notification' in window) { /* 使用 API */ } else { /* 显示站内提示 */ }

基本上就这些。只要合理请求权限、构造通知内容并响应用户行为,就能有效利用桌面通知提升产品体验,同时尊重用户选择。