使用 Javascript 实现浏览器推送提醒功能的示例


Posted in Javascript onNovember 03, 2017

本篇文章内容简单,速读只需两三分钟,通过这两三分钟的时间你就可以给自己的网站实现推送提醒的功能

Notification 类

简单明了,这个类就是负责推送消息的,只要用户当前没有关闭页面,及时是在使用其他程序,浏览器也能够将消息推送给用户

请求权限

我们在手机上都收到过消息推送,在接收推送之前我们会先将消息推送权限开放给应用。在浏览器中也一样,在使用浏览器推送之前,需要先获取权限

Notification.requestPermission().then(permission => {
  console.log(permission)
})

通过 requestPermission 方法可以为当前域名请求消息推送的权限,这个方法可以使用 Promise 语法来实现请求结果的处理。当然,你也可以使用回调的方式来实现

回调的参数 permission 表示当前请求后用户的选择:允许推送 / 不允许推送,它的值也分别有两个 granted / denied,当我们发现用户不允许的推送的时候,就可以在回调中做出相应的提示,告诉用户可能会导致不能及时接收消息,并且告诉用户如果想要接收消息该如何操作等

查看权限

由于推送的权限是基于域名的,因此同一个网站在请求一次权限后,下一次打开时就不会再次请求,而是直接通过第一次的用户选择来决定网站是否能向用户推送

因此我们就需要能够获取到当前网站的推送的状态,可以通过下面的这个属性来获取状态:

Notification.permission

permission 属性的值有三种:granted - 允许推送;denied - 拒绝推送;default - 还未申请权限

当值为 default 时,我们就可以向用户请求推送的权限了

发起一条推送

const note = new Notification (title, opts)

通过上面的方式可以声明一条推送,它有两个参数,第一个参数是消息的标题,这个是必填的一个参数;而通过第二个选填参数,我们则可以实现更多自定义的显示内容:

第二个参数接收一个对象,它有一下几个属性:

  1. body:推送的主体内容
  2. tag:推送的标识,如果我们声明了多个 Notification,而这些推送的 tag 都相同,则只会推送一次
  3. icon:需要在推送中显示的图标的 URL
  4. data:推送的消息所带有的数据信息,当用户点击推送窗口时,可以通过这些信息为用户展示相应的内容
  5. requireInteraction:正常情况下,推送发出后若用户没有操作,几秒后就会消失,而将该属性设为 true 则可以让推送始终维持而不消失,默认值是 false

当我们需要自定义推送显示时长的时候,可以通过最后一个属性将自动消失关闭,然后配合 note.close() 和 setTimeout 方法人为控制推送时长

点击推送事件

既然已经可以成功的发起一条推送,那么该如何监听到用户是否点击了这个推送呢?很简单,通过 onclick 属性就可以实现

note.onclick = () => {
  //在这里实现用户点击后的逻辑
}

其他

需要注意的是,并不是所有浏览器都支持 Notification,所以在使用前需要先检测能否使用

或许有的小伙伴会想,这个功能不错,这样在手机上也能实现网页消息推送了。然而很不幸的是,移动端浏览器几乎100%不支持 Notification :(

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
tagName的使用,留一笔
Jun 26 Javascript
javascript onmouseout 解决办法
Jul 17 Javascript
纯js和css实现渐变色包括静态渐变和动态渐变
May 29 Javascript
jQuery中extend函数的实现原理详解
Feb 03 Javascript
ANGULARJS中使用JQUERY分页控件
Sep 16 Javascript
AngularJS 自定义指令详解及示例代码
Aug 17 Javascript
bootstrap模态框垂直居中效果
Dec 03 Javascript
jQuery.Ajax()的data参数类型详解
Jul 23 jQuery
利用yarn代替npm管理前端项目模块依赖的方法详解
Sep 04 Javascript
vue强制刷新组件的方法示例
Feb 28 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
Jul 24 Javascript
你不知道的SpringBoot与Vue部署解决方案
Nov 09 Javascript
Angular4绑定html内容出现警告的处理方法
Nov 03 #Javascript
关于Vue背景图打包之后访问路径错误问题的解决
Nov 03 #Javascript
React.Js添加与删除onScroll事件的方法详解
Nov 03 #Javascript
基于jQuery解决ios10以上版本缩放问题
Nov 03 #jQuery
nginx配置React静态页面的方法教程
Nov 03 #Javascript
angular中ui calendar的一些使用心得(推荐)
Nov 03 #Javascript
mui上拉加载更多下拉刷新数据的封装过程
Nov 03 #Javascript
You might like
咖啡冲泡指南 咖啡有哪些制作方式 单品咖啡 意式咖啡
2021/03/06 冲泡冲煮
php自定义时间转换函数示例
2016/12/07 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
JavaScript实现Iterator模式实例分析
2015/06/09 Javascript
JavaScript Length 属性的总结
2015/11/02 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
jQuery实现的简单无刷新评论功能示例
2017/11/08 jQuery
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
微信小程序支付及退款流程详解
2017/11/30 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
JavaScript事件冒泡机制原理实例解析
2020/01/14 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
Python导入模块时遇到的错误分析
2017/08/30 Python
Python读写zip压缩文件的方法
2018/08/29 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
解决Mac下使用python的坑
2019/08/13 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
python网络编程之五子棋游戏
2020/05/14 Python
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
2017/06/15 HTML / CSS
将HTML5 Canvas的内容保存为图片借助toDataURL实现
2013/05/20 HTML / CSS
全球工业:Global Industrial
2020/02/01 全球购物
法国亚马逊官方网站:Amazon.fr
2020/12/19 全球购物
乡村文明行动实施方案
2014/03/29 职场文书
《荷花》教学反思
2014/04/16 职场文书
优秀员工推荐信
2014/05/10 职场文书
企业精神口号
2014/06/11 职场文书
项目申报专员岗位职责
2014/07/09 职场文书
意外伤害赔偿协议书范本
2014/09/28 职场文书
查摆问题整改措施范文
2014/10/11 职场文书
2016优秀护士先进个人事迹材料
2016/02/25 职场文书
2019学校运动会开幕词
2019/05/13 职场文书
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript
详解CSS3浏览器兼容
2022/12/24 HTML / CSS