桌面通知在 Safari 上为啥不弹出?

静依 阅读 2

我在项目里用 Notification API 做了个桌面提醒功能,Chrome 和 Firefox 都正常,但 Safari 完全没反应,也没报错。

已经检查过用户授权了,Notification.permission 返回的是 ‘granted’,代码也执行到了 new Notification('标题', { body: '内容' }) 这一行,就是不显示通知。

是不是 Safari 有啥特殊限制?比如必须用 HTTPS 或者不能在 iframe 里调用?我本地开发是 http://localhost,会不会是这个原因?

我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
萌新.倩利
确实,Safari 对桌面通知有不少特殊要求。首先得说,本地开发用 http://localhost 不会是问题,因为 Safari 允许在 localhost 上测试通知。

但有几个关键点你得检查一下。推荐的做法是确保你的页面是从用户交互触发的通知请求。Safari 比较严格,如果是在页面加载时直接调用 Notification.requestPermission(),很可能不会生效。

另外,虽然你说已经获取了权限,但最好还是加上一个检查逻辑:
if (Notification.permission === 'granted') {
new Notification('标题', { body: '内容' });
} else if (Notification.permission !== 'denied') {
Notification.requestPermission().then(permission => {
if (permission === 'granted') {
new Notification('标题', { body: '内容' });
}
});
}


还有个容易被忽略的点是,Safari 要求网站必须在用户的“允许通知”列表里。你可以让用户进入系统偏好设置 -> 通知,然后找到你的网站添加进去。

最后提醒下,Safari 的通知样式可能会跟 Chrome/Firefox 不太一样,这是正常现象,符合各浏览器实现标准。
点赞
2026-03-30 01:00