Notification API 为什么在本地文件中无法弹出通知?

小振艳 阅读 43

我在用 Chrome 测试 Notification API,写了个简单的请求权限和显示通知的代码,但双击打开 HTML 文件时完全没反应,控制台也没报错。

我试过 Notification.requestPermission(),也检查了浏览器设置,允许通知了。是不是 file:// 协议不支持?必须部署到服务器才行吗?

if (Notification.permission === 'granted') {
  new Notification('测试通知', { body: '这条消息应该弹出来' });
} else if (Notification.permission !== 'denied') {
  Notification.requestPermission().then(permission => {
    if (permission === 'granted') {
      new Notification('授权成功', { body: '现在可以发通知了' });
    }
  });
}
我来解答 赞 8 收藏
二维码
手机扫码查看
2 条解答
Mc.春彦
Mc.春彦 Lv1
是的,你猜对了,file:// 协议确实不支持 Notification API,这是浏览器的安全限制。

为什么本地文件打不开?

浏览器出于安全考虑,对 file:// 协议下的网页限制了很多功能。你想啊,如果随便一个本地 HTML 文件就能弹出系统通知,那恶意代码随便发通知谁来管?所以 Chrome 和其他主流浏览器都对 file:// 做了限制。

Notification API 在 file:// 下有两个问题:
一是权限请求根本不会真正生效,二是就算你手动在浏览器设置里打开了权限,通知也发不出去。

最简单的解决办法:起一个本地服务器

不用部署到外网,自己电脑上跑个小服务器就行。这里给你几个方案:

方案一:用 Python(如果你装了 Python 的话)

打开命令行,进入你的 HTML 文件所在目录,运行:

python -m http.server 8080

然后浏览器访问 http://localhost:8080/你的文件名.html

方案二:用 Node.js 的 http-server

先安装:
npm install -g http-server

然后在目录里运行:
http-server -p 8080

方案三:VS Code 的 Live Server 插件

如果你用 VS Code,直接装 Live Server 插件,右键点击 HTML 文件选择 "Open with Live Server" 就行,这个最省事。

关于你的代码,逻辑是对的,稍微调整一下

你的代码可以直接用,不过建议加个兼容性处理,毕竟有些浏览器不支持 Promise 写法:

// 先检查浏览器是否支持 Notification
if ('Notification' in window) {
if (Notification.permission === 'granted') {
// 已经授权过,直接发通知
new Notification('测试通知', {
body: '这条消息应该弹出来了',
icon: '图标URL可选' // 可以加个图标
});
} else if (Notification.permission !== 'denied') {
// 未授权,请求权限
Notification.requestPermission().then(permission => {
if (permission === 'granted') {
new Notification('授权成功', {
body: '现在可以发通知了'
});
}
});
}
} else {
console.log('当前浏览器不支持 Notification API');
}

跑起来之后,浏览器会弹出权限请求框,点允许,应该就能看到通知了。

这里需要注意的是,即使用了本地服务器,初次授权后可能还需要刷新一下页面通知才能正常弹出,还有 Mac 系统上 Chrome 的通知需要在系统设置里也打开权限,别忘了检查一下。
点赞
2026-03-11 11:05
程序员树森
file:// 协议下 Chrome 出于安全限制不支持 Notification API,必须用 http/https 协议。直接起个本地服务器就行,比如用 Python 的 python -m http.server 或者 Node 的 npx http-server,或者 VS Code 装个 Live Server 插件一键搞定。
点赞 3
2026-02-28 22:21