custom display time of notification

JavaScript

浏览器显示 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 的情况有所不同。