浏览器显示 Notification 默认是有一个自动消失时间的。不同的浏览器,这里的消失时间并不一致,从测试来看:
- Chrome: ~6s
- Firefox: ~19s
- Edge: ~6s
从目前浏览器公开的 API 来看,并没有一个接口可以直观的修改这里的消失时间。一个可行的解决方案是:用 requireInteraction
来强制要求浏览器不自动关闭 Notification,然后设置 setTimeout
并在合适的时机手动关闭这个显示的 Notification。
示例代码如下:
var delay = 10 * 1000;
Notification.requestPermission(function (status) {
if (status === "granted") {
var notification = new Notification(
"Hi! ",
{
requireInteraction: true,
},
);
var timer = setTimeout(function () {
notification.close();
}, delay);
}
});
目前 requireInteraction
的浏览器支持情况并不非常理想,只有 Chrome, Edge(17+) 和 Opera 做了支持。具体的支持列表,可以看这里。
另外,从实际的使用上来看,Edge 浏览器中即使设置了 requireInteraction
,notification 在一定时间之后也会消失,只是消失的时间会比原来默认的情况要长一些,大约是 25 秒。Chrome 的 Notification 如果设置了 requireInteraction
,会多一个 Close 的按钮,展示效果和没有 requireInteraction
的情况有所不同。