JavaScript发送桌面通知需先通过Notification.requestPermission()在用户手势下请求授权,权限为"granted"后调用new Notification(title, options)显示通知,仅支持HTTPS或localhost环境,且须处理permission状态与事件监听。

JavaScript 使用浏览器通知 API 发送桌面通知,需要先请求用户授权,再创建通知。整个过程依赖 Notification 对象,且仅在 HTTPS 环境或本地开发环境(localhost)下可用。
检查并请求通知权限
用户必须明确授权才能接收通知。不能跳过这一步,否则通知会静默失败。
- 用
Notification.permission检查当前权限状态:"granted"(已允许)、"denied"(已拒绝)、"default"(未决定) - 调用
Notification.requestPermission()弹出浏览器授权框(该方法返回 Promise) - 注意:该方法只能在用户手势(如点击、按键)触发的上下文中调用,不能在页面加载时自动执行
创建并显示通知
获得 "granted" 权限后,即可使用 new Notification(title, options) 显示通知。
-
title是必填的字符串,显示为通知标题 -
options是可选对象,常用字段包括:
•body:正文文本
•icon:图标 URL(建议尺寸至少 192×192 像素)
•badge:小图标(用于通知栏聚合时显示)
•tag:唯一标识符,相同 tag 的新通知会替换旧通知 - 示例:
new Notification("消息提醒", { body: "你有一条新消息", icon: "/icon.png" });
监听通知事件与清理资源
通知支持交互事件,便于增强用户体验。
立即学习“Java免费学习笔记(深入)”;
-
onclick:用户点击通知时触发(常用于跳转页面) -
onshow:通知成功显示时触发(可用于统计曝光) -
onerror:通知因权限/系统限制等失败时触发 -
onclose:用户手动关闭或超时自动关闭后触发 - 注意:事件回调中若需操作 DOM 或跳转,应确保在安全上下文内执行(如使用
window.open()需加target="_blank" rel="noopener")
兼容性与注意事项
主流现代浏览器(Chrome、Edge、Firefox、Safari 16.4+)均支持,但行为略有差异。
- Safari 要求网站被“添加到主屏幕”后才支持通知(macOS Safari 支持更完整)
- 移动端 Android Chrome 支持良好;iOS Safari 目前不支持桌面通知(仅支持 PWA 的推送通知,需服务端配合)
- 通知不会唤醒休眠标签页,也不保证 100% 展示(受系统设置、静音模式、电池优化等影响)
- 避免频繁发送通知,否则可能被用户屏蔽,甚至被浏览器标记为骚扰


















