来认识下HTML5的桌面通知-Notification API

230 阅读3分钟

这是我参与8月更文挑战的第18天,活动详情查看:8月更文挑战

前言

HTML5新增了Notification API,这个API主要是用来显示桌面通知的。

之前在项目里用了一下,刚好把它总结下,算是加深印象,也方便下次查阅。

Notification

语法

它是一个构造函数,所以使用new来生成实例

const notification = new Notification(title, options)

生成的实例有个方法,notification.close(),调用会关闭桌面通知。

桌面通知会在显示几秒后自动关闭(默认情况下)。

参数解析:

  • title

    桌面通知的显示标题,string类型,必填

  • options

    桌面通知的配置选项,object类型,可选

    • dir

      文字的方向,值有auto(自动,默认值),ltr(从左到右),rtl(从右到左)

    • body

      通知显示的额外字符串

    • icon

      图标地址,string类型,通知显示的icon

    • image

      通知的背景图像地址,string类型

    • tag

      标签,string类型或者number类型。标记当前的桌面通知

    • renotify

      新通知是否会覆盖旧通知,默认是false,不会覆盖

      如果设置了renotifytrue,则tag也要设置。

    • requireInteraction

      是否自动关闭通知,默认为false, 自动关闭通知(一般间隔几秒后关闭)

构造函数Notification上的属性

  • permission

    是否允许显示桌面通知,有以下值:

    • granted

      用户允许显示

    • denied

      用户禁止显示

    • default

      用户还没选择,表现和denied一样,不显示桌面通知

构造函数Notification上的方法(生成实例后实例也会继承)

  • requestPermission

    申请桌面通知的权限,返回一个promise对象,then方法的回调参数代表的用户是否允许显示桌面通知,granted(允许),denied(禁止),default(未选择,等同denied)

  • onclick

    点击桌面通知会触发

  • onshow

    桌面通知显示会触发

  • onerror

    桌面通知出现错误时会触发

  • onclose

    桌面通知关闭时触发

显示的过程

  • 我们首先要先请求用户显示桌面通知权限
  • 如果用户选择允许,则调用api显示桌面通知
  • 如果用户选择禁止或者不选择,则无法显示桌面通知
  • 一旦选择权限了,后续无需再次选择
  • 如果想重新更改选择,可以点击域名左边的小icon,切换选择

需要注意的问题

  • 需要在域名的协议是https下才会生效。
  • 这个通知一旦显示,则跟浏览器脱离了,浏览器关闭它也可以不关闭。
  • 设置了tag,而且tag一样的通知,在一段时间内只会出现一次

例子演示

   function showNotificationFn() {
    if (window.Notification) {
      Notification.requestPermission().then((permission) => {
        if (permission === 'granted') {
          const notification = new Notification('大家好,我是答案cp3!', {
            body: '我是副标题',
            icon: 'https://sf6-ttcdn-tos.pstatp.com/img/user-avatar/d8537ba83ad12777c1519fedcf3f62fb~300x300.image',
            requireInteraction: true
          })
          notification.onclick = () => {
            console.log('我被点击了!')
            notification.close()
          }
        }
      })
    }
   }
   showNotificationFn()

先允许:

image.png

再显示通知:

mac上的:

image.png

window上的:

image.png

总结

以上就是Notification API的知识,大家可以动手敲敲代码,还是挺有意思的。