Notification API 是浏览器BOM中用于发送桌面通知的接口,需先通过用户交互调用 requestPermission() 获取授权(权限状态含 granted/denied/default),再用 new Notification(title, options) 创建异步显示的通知,并可监听 onclick/onshow/onerror/onclose 事件;现代浏览器支持良好,但 Safari 和移动端存在限制。

Notification API 是浏览器提供的用于向用户发送桌面通知的接口,它属于 BOM(Browser Object Model)的一部分。要在用户允许后在操作系统桌面弹出异步通知,需满足几个前提条件并按规范调用。
请求用户授权并检查权限状态
浏览器默认禁止自动发送通知,必须先获得用户明确授权。调用 Notification.requestPermission() 会触发浏览器权限提示(仅在用户交互后如点击事件中有效)。
- 权限状态有三种:
"granted"(已允许)、"denied"(已拒绝)、"default"(未决定,等同于拒绝) - 不能在页面加载时直接请求,需绑定到按钮点击等用户动作上
- 示例:
button.addEventListener('click', async () => { const permission = await Notification.requestPermission(); if (permission === 'granted') { showDesktopNotification(); } });
创建并显示桌面通知
授权成功后,即可用 new Notification(title, options) 创建通知。该操作是同步构造、异步展示(即立即返回 Notification 实例,系统在后台异步渲染)。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
title是必填字符串;options可选,常用字段包括:body(正文)、icon(图标 URL,建议使用绝对路径或 data URL)、badge、tag(用于去重) - 通知显示不阻塞主线程,也不依赖当前页面是否聚焦 —— 即使用户切换到其他标签页或最小化浏览器,仍可能在桌面弹出(取决于系统和浏览器设置)
- 示例:
function showDesktopNotification() { new Notification('新消息', { body: '你有一条未读通知', icon: '/icons/notify.png' }); }
处理通知事件与生命周期
Notification 实例可监听 onclick、onshow、onerror、onclose 等事件,便于交互响应。
立即学习“Java免费学习笔记(深入)”;
-
onclick在用户点击通知时触发,常用于聚焦窗口或跳转页面 -
onshow表示通知已成功渲染(但不保证用户一定看到) -
onerror多因权限失效、资源加载失败或系统禁用通知导致 - 注意:事件监听需在创建 Notification 后立即绑定,否则可能错过
onshow或onclick
兼容性与注意事项
Notification API 在现代浏览器中支持良好(Chrome、Edge、Firefox、Safari 16.4+),但部分行为存在差异:
- Safari 要求网站在 Apple 开发者账号中启用推送功能,且仅支持通过 Service Worker 发送(页面内调用受限)
- 移动端浏览器大多不支持桌面通知(Android Chrome 支持但需配合 Service Worker;iOS Safari 不支持)
- 若用户手动关闭通知或系统级禁用,即使权限为 granted,通知也可能静默失败
- 避免频繁触发(如每秒多次),否则浏览器可能自动屏蔽或折叠通知

















