PWA(Progressive Web App)入门系列:Notification

前言

在很多场景下,需要一种通知的交互方式来提醒用户,传统方式下可以在页面实现一个 Dialog,或通过修改网页的 title 来实现消息的通知。然而传统的实现存在着一定的不足,在网页最小化的情况下,无法查看任何通知,导致用户无法及时获取通知信息。

给力的 W3C 推出了 Notifications API,专注于 WEB 的通知。


Notifications

Notifications API 的 Notification 界面用于配置和显示用户的桌面通知。 这些通知的外观和特定功能因平台而异,但通常它们提供了一种向用户异步提供信息的方法。

此 API 在 WebWorker 环境下也可以使用。
注意:此 API 必须运行在 https 环境下,非 https 环境无法授权。

流程:

构造器

语法:

var myNotification = new Notification(title, options);

参数:

  • title:DOMString,定义通知的标题,该标题在触发时将显示在通知窗口的顶部。
  • options:
    • actions:NotificationActions 数组,表示在显示通知时用户可用的操作。 这些是用户可以选择的选项,以便在通知本身的上下文中对该动作起作用。 操作的名称将发送到服务工作者通知处理程序,以使其知道用户已选择的操作。数组的成员应该是对象文字。它可能包含以下值:(注意:此属性只在 serviceWorker 环境下有效。click 时可以通过 event.action 来获取)
      • action:DOMString,显示在通知上的 action 标志。
      • title:DOMString,显示在通知上的 action 标题。
      • icon:USVString,显示在 action 上的 icon URL。
    • badge:包含图像 URL 的U SVString,用于在没有足够空间显示通知本身时表示通知,例如 Android Notification Bar。 在 Android 设备上,徽章应能容纳高达4倍分辨率的设备,大约 96 x 96 像素,并且图像将自动屏蔽。
    • body:表示要在通知中显示的额外内容的字符串。
    • data:希望与通知关联的任意数据。这可以是任何数据类型,通event.currentTarget.data 来获取。
    • dir:显示通知的方向。 它默认为 auto,它只采用浏览器的语言设置行为,但你可以通过设置 ltr 和 rtl 的值来覆盖该行为(尽管大多数浏览器似乎忽略这些设置。)
    • icon:USVString,包含要在通知中显示的图标的URL。
    • lang:指定通知中使用的 lang。此字符串必须是有效的 BCP 47 语言标记。
    • renotify:Boolean,指定在新通知替换旧通知后是否应通知用户。 默认值为false,表示不会通知他们。
    • requirInteraction:表示通知应保持活动状态,直到用户单击或关闭它,而不是自动关闭。 默认值为 false。必须带 tag 才有效果。
    • silent:无论设备设置如何,都应该发出一个布尔值,指定通知是否应该是静音,即不应发出声音或振动。 默认值为 false,这意味着它不会是静默的。
    • tag:给定通知的 ID,允许您在必要时使用脚本查找,替换或删除通知。
    • timestamp:DOMTimeStamp 表示创建通知的时间。 它可用于指示通知实际的时间。 例如,这可能是在过去,当通知用于因设备离线而无法立即传递的消息时,或将来用于即将开始的会议时间。
    • vibrate:与通知显示一起运行的振动模式。 振动模式可以是具有少至一个成员的阵列。 值是以毫秒为单位的时间,其中偶数索引(0,2,4等)表示振动多长时间,奇数索引表示暂停多长时间。 例如,[300,100,400] 将振动 300ms,暂停 100ms,然后振动 400ms。

属性

静态属性:

  • permission:Notification.permission ,获取当前用户对通知的权限。值:
    • granted:用户已授权显示系统通知。
    • denied:用户已拒绝显示系统通知。
    • default:用户未做决定,程序表现为拒绝。

实例属性:(含义同构造器中的 option)

  • actions
  • badge
  • body
  • data
  • dir
  • lang
  • tag
  • icon
  • image
  • renotify
  • requireInteraction
  • silent
  • timestamp
  • vibrate

事件

onclick

点击显示通知框时触发的事件。

Notification.onclick = function(event) { ... };

可以通过 preventDefault() 阻止焦点显示到 notification 打开的 tab 上。
通过 event.currentTarget 来获取属性。

onclose

通知关闭时,触发此事件。
必须调用 Notification.close() 才能触发此事件。

Notification.onclose = function() { ... };

onerror

用作错误事件的事件处理程序。发生错误时,将调用指定的函数。如果为null,则没有错误处理程序生效。

Notification.onerror = EventListener;

onshow

通知出现的时候,触发此事件。

Notification.onshow = function() { ... };

方法

静态方法:

  • requestPermission():请求通知权限。返回 Promise,类型为 Notification.permission

当前 permission 为 default 时,出现授权通知:

注意:在 PC 中,当出现授权通知时,如果不做任何选择,而是点击右上角的关闭x,连续三次这种操作后,系统会自动设置为 denied。

当前 permission 为 granted 时,直接返回 Promise,执行 then 后的代码。后续不需要在申请权限。

当前 permission 为 denied 时,直接返回 Promise,执行 catch 后面的代码。后续一直是拒绝状态,不再弹出授权框。此时 serviceWorker pushManager 不可用,订阅会抛出错误。此状态下,只能通过用户自己去修改权限。

实例方法:

  • close():Notification 实例调用,关闭通知,触发 onclose 事件。

实例

点击通知 打开指定页面

Notification.requestPermission().then(() => {var n = new Notification('天气预报', {body: '今天天气晴朗,详情请点击~',icon: 'https://img.alicdn.com/tfs/TB1XPvwUVzqK1RjSZFvXXcB7VXa-1024-1024.png',requireInteraction: true,data: {nav: 'https://baidu.com'}});n.onclick = event => {n.close();if(event.currentTarget.data.nav) {window.open(event.currentTarget.data.nav);}};
}).catch(() => {alert('通知权限已禁止,请设置打开权限');
})

通知按钮交互

actions 必须在 serviceWorker 中使用。

navigator.serviceWorker.ready.then(swReg => {Notification.requestPermission().then(() => {swReg.showNotification('好友请求', {body: '美女向你打招呼~',icon: 'https://img.alicdn.com/tfs/TB1qyPtU3HqK1RjSZFEXXcGMXXa-640-859.png',requireInteraction: true,actions: [{action: 'yes',title: '加好友',}, {action: 'no',title: '拒绝'}]});})
})

sw 环境处理代码:

self.addEventListener("notificationclick", function(event) {console.log("notificationclick", event);event.notification.close();if(event.action == 'yes') {// ***} else if(event.action == 'no') {// xxx}
});

兼容性


博客名称:王乐平博客

CSDN博客地址:http://blog.csdn.net/lecepin

知识共享许可协议
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Deep learning:一(基础知识_1)

本文纯转载; 主要是想系统的跟tornadomeet的顺序走一遍deeplearning; 前言: 最近打算稍微系统的学习下deep learing的一些理论知识,打算采用Andrew Ng的网页教程UFLDL Tutorial,据说这个教程写得浅显易懂,也不太长。不过在这这之前…

小程序 遮罩层(阻止事件穿透)

小程序 遮罩层&#xff08;阻止事件穿透&#xff09; 若弹出层没有滚动事件 直接在蒙板上加catchtouchmove“preventTouchMove” 即可 <view class"mask" catchtouchmove"preventTouchMove">我是遮罩层 </view>若弹出层有滚动事件 需要动态监…

PWA(Progressive Web App)入门系列:Push

前言 很多时候&#xff0c;原生应用会通过一些消息推送来唤起用户的关注&#xff0c;增加驻留率。网页该怎么做呢&#xff1f;有没有类似原生应用的推送机制&#xff1f;推送功能又能玩出什么花样呢&#xff1f; Push API Push API 给与了 Web 应用程序接收从服务器发出的推送…

Dom学习笔记

DOM document object model 文档 对象 模型 文档&#xff1a;html页面 文档对象&#xff1a;页面中的元素 文档对象模型: 文档对象模型是w3c 为了能够让js去操作页面中的元素&#xff0c;定义的一套标准 DOM会把当前文档看作一棵树 树种的每一个元素就是文档树 的一个节点 同…

小程序 WXS响应事件(滚动菜单栏tab吸顶)

小程序 WXS响应事件&#xff08;滚动菜单栏tab吸顶&#xff09; 解决问题&#xff1a; 小程序页面滚动&#xff0c;tab触顶吸顶 解决办法&#xff1a; 1&#xff09;页面滚动事件中监听处理&#xff08;不推荐&#xff09; 缺点&#xff1a;在安卓端性能非常差&#xff0c;吸…

PWA(Progressive Web App)入门系列:消息通讯

前言 serviceWorker 的能力决定它要处理的事情&#xff0c;网站页面的部分逻辑处理会转移到 serviceWorker 层进行处理&#xff0c;这里就要页面层和 serviceWorker 层进行交互来实现消息通讯。 下面就说一下两个环境下的消息通讯。 窗口向 serviceWorker 通讯 这里列举出窗…

查看Linux上程序或进程用到的库

为什么80%的码农都做不了架构师&#xff1f;>>> ldd /path/to/program 要找出某个特定可执行依赖的库&#xff0c;可以使用ldd命令。这个命令调用动态链接器去找到程序的库文件依赖关系。 objdump -p /path/to/program | grep NEEDED 注意&#xff01;并不推荐为任…

超方便的 IndexDB 库

前言 做为 Web 浏览器层的本地存储&#xff0c;IndexDB 做为一个很好的选择&#xff0c;几乎可以存储任意类型的数据&#xff0c;且是异步的。但是正常使用方式下需要在监听各种事件来处理结果&#xff0c;不是很方便&#xff0c;下面就对这一层进行了包装&#xff0c;使用方便…

小程序 WXS响应事件(超出两屏显示返回顶部按钮)

小程序 WXS响应事件&#xff08;超出两屏显示返回顶部按钮&#xff09; 两种解决办法&#xff1a; view页面形式实现&#xff1a; <wxs module"test" src"./test.wxs"></wxs> // 引入wxs<scroll-viewbindscroll"onPageUpdate"…

BP网络识别26个英文字母matlab

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;字母识别 获取完整源码源工程文件 一、 设计思想 字符识别在现代日常生活的应用越来越广泛&#xff0c;比如车辆牌照自动识别系统&#xff0c;手写识别系统&#xff0c;办公自动化等等。本文采用BP网络对26个英文字母进行…

C#多线程写日志

由于程序是3层架构的&#xff0c;所有多线程记录日志成了比较棘手的问题&#xff0c;以前还真就没有在意过写日志的问题&#xff0c;认为不过是写文件罢了~~&#xff01;如今发现原来要实现文件共享&#xff0c;并且能够使多线程同时操作日志还不能相互冲突&#xff0c;真的很麻…

PWA(Progressive Web App)入门系列:Sync 后台同步

前言 当我们在一些地下停车场&#xff0c;或者在火车上、电梯等无法避免的信号不稳定的场所&#xff0c;使用网站应用处理一些表单操作或者上传数据的操作时&#xff0c;面临的将是网络连接错误的响应&#xff0c;使用户的操作白费。 而此刻 PWA 的 Sync API 就很好的解决了这…

PWA(Progressive Web App)入门系列:安装 Web 应用

前言 在传统的 Web 应用中&#xff0c;通常只能通过在浏览器的地址栏里输入相应的网址才能进行访问&#xff0c;或者把网页地址创建到桌面上通过点击&#xff0c;然后在浏览器里打开。 传统模式下&#xff0c;图标、启动画面、主题色、视图模式、屏幕方向等等都无法去自定义和…

「工具」IndexDB 版备忘录

前言 工作日常需要做一些备忘录&#xff0c;记录一些要做的事。在 Mac 上有使用系统的备忘录&#xff0c;但功能偏弱且文本格式调整不方便。再就是使用浏览器找专门的备忘录网站&#xff0c;功能是满足了&#xff0c;但是链路长&#xff0c;没有桌面软件直接。 所以最后干脆自…

「工具」PWA Manifest图标及 favicon.ico 生成工具

PWA 其中有一个能力就是把网站安装到系统桌面&#xff0c;以原生应用的体验来运行网站&#xff0c;使用户无需再找开浏览器输入网址进入网站&#xff0c;而是可以直接点击安装好的应用直接运行&#xff0c;给使网站访问缩短路径及增加网站的曝光度。 其中有一个问题就是需要生…

各种浏览器缓存浅析

前言 目前浏览器的缓存类型众多&#xff0c;HTTP Cache、Disk Cache、Memory Cache、ServiceWorker Cache、Push Cache 等等&#xff0c;这些缓存是如何产生的&#xff1f;命中优先级是怎么样&#xff1f;又该如何去使用它们&#xff1f; Disk Cache、Memory Cache Disk Cac…

[工具]TS 视频合并工具

简介 当下载 m3u8 资源时&#xff0c;通常产生的是多个 ts 视频文件&#xff0c;所以需要借助某些工具来将这些 ts 视频片段整合为一个视频文件。 本软件主要解决的就是这个问题&#xff0c;底层基于ffmpeg&#xff0c;可正常运行在 Windows 和 Mac 平台。不仅可以合并 ts 为单…

[会议分享]2020全球软件大会分享-PWA在项目中的最佳实践

大会地址&#xff1a;https://www.bagevent.com/event/1233659# PPT下载&#xff1a;https://download.csdn.net/download/lecepin/12871373

「浏览器插件」非常好用的JSON-View

Chrome 商店&#xff1a;地址 下载地址&#xff1a;地址 Github&#xff1a;https://github.com/lecepin/lp-json-view 查看/格式化 二合一。 功能 自动识别 JSON 内容&#xff0c;并在页面右下角创建切换按钮。支持展开/折叠节点。支持全部展开、全部折叠、展开一二三层节点…

Github Action 快速构建 Electron 应用

前言 在开发 Electron 应用时&#xff0c;比较耗时的部分应该是构建打包的过程&#xff0c;像用 electron-builder 这种打包工具来说&#xff0c;它会根据你要打包的系统来下载应用的系统镜像打包工具&#xff0c;由于这些镜像的源文件托管在 Github 上&#xff0c;且 nodejs …