使用 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 相关文章推荐
让您的菜单不离网站
Oct 03 Javascript
在IE下获取object(ActiveX)的Param的代码
Sep 15 Javascript
javascript中检测变量的类型的代码
Dec 28 Javascript
『jQuery』名称冲突使用noConflict方法解决
Apr 22 Javascript
获取select的value、text值的简单示例(jquery与javascript)
Dec 07 Javascript
微信小程序商品到详情的实现
Jun 27 Javascript
vue中配置mint-ui报css错误问题的解决方法
Oct 11 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
Aug 13 Javascript
微信小程序实现展示评分结果功能
Feb 15 Javascript
vue实现表单录入小案例
Sep 27 Javascript
webpack.DefinePlugin与cross-env区别详解
Feb 23 Javascript
JavaScript进阶(三)闭包原理与用法详解
May 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
用PHP连mysql和oracle数据库性能比较
2006/10/09 PHP
CI框架简单邮件发送类实例
2016/05/18 PHP
JQuery获取或设置ckeditor的数据(示例代码)
2013/11/15 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
2014/06/05 Javascript
jquery显示隐藏input对象
2014/07/21 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
Angularjs的Controller间通信机制实例分析
2016/11/07 Javascript
Vue.js组件tree实现省市多级联动
2016/12/02 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
2017/02/08 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
vue下axios拦截器token刷新机制的实例代码
2020/01/17 Javascript
[38:32]完美世界DOTA2联赛循环赛 Forest vs DM 第二场 11.06
2020/11/06 DOTA
微信跳一跳python代码实现
2018/01/05 Python
python事件驱动event实现详解
2018/11/21 Python
对python3.4 字符串转16进制的实例详解
2019/06/12 Python
python中的&&及||的实现示例
2019/08/07 Python
pytorch 图像预处理之减去均值,除以方差的实例
2020/01/02 Python
150行python代码实现贪吃蛇游戏
2020/04/24 Python
Python脚本破解压缩文件口令实例教程(zipfile)
2020/06/14 Python
详解pycharm自动import所需的库的操作方法
2020/11/30 Python
HTML5页面无缝闪开的问题及解决方案
2020/06/11 HTML / CSS
Perfumetrader荷兰:香水、化妆品和护肤品在线商店
2017/09/15 全球购物
大学系主任推荐信范文
2013/12/24 职场文书
银行介绍信范文
2014/01/10 职场文书
班主任班级寄语大全
2014/04/04 职场文书
村级换届选举方案
2014/05/10 职场文书
公司节能减排倡议书
2014/05/14 职场文书
本科生自荐信
2014/06/18 职场文书
2014年汽车销售工作总结
2014/12/01 职场文书
法律意见书范文
2015/05/20 职场文书
辛德勒的名单观后感
2015/06/03 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书
React Fragment介绍与使用详解
2021/11/11 Javascript