使用 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 相关文章推荐
prototype 的说明 js类
Sep 07 Javascript
Jquery事件的连接使用示例
Jun 18 Javascript
JS实现单行文字不间断向上滚动的方法
Jan 29 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
Feb 28 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
May 04 Javascript
JavaScript获取当前url根目录(路径)
Jun 17 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
Dec 19 Javascript
layui实现左侧菜单点击右侧内容区显示
Jul 26 Javascript
nuxt框架中对vuex进行模块化设置的实现方法
Sep 06 Javascript
js实现登录拖拽窗口
Feb 10 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
Mar 25 Javascript
JS轻量级函数式编程实现XDM三
Jun 16 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 获取select下拉列表框的值
2010/05/08 PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
2013/06/01 PHP
PHP加密技术的简单实现
2016/09/04 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)
2007/05/08 Javascript
修复IE9&safari 的sort方法
2011/10/21 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
2014/06/06 Javascript
在WordPress中加入Google搜索功能的简单步骤讲解
2016/01/04 Javascript
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
element-ui 设置菜单栏展开的方法
2018/08/22 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
JS实现选项卡效果的代码实例
2019/05/20 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
jquery+css3实现的经典弹出层效果示例
2020/05/16 jQuery
基于Vue中的父子传值问题解决
2020/07/27 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
python 多线程实现检测服务器在线情况
2015/11/25 Python
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
浅谈python对象数据的读写权限
2016/09/12 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
CSS3的新特性介绍
2008/10/31 HTML / CSS
详解HTML5中的picture元素响应式处理图片
2018/01/03 HTML / CSS
Monnier Frères美国官网:法国知名奢侈品网站
2016/11/22 全球购物
项目合作计划书
2014/01/09 职场文书
司马光教学反思
2014/02/01 职场文书
班级标语大全
2014/06/21 职场文书
公司人事专员岗位职责
2014/08/11 职场文书
供应商食品安全承诺书
2015/04/29 职场文书
捐书仪式主持词
2015/07/04 职场文书
Python 循环读取数据内存不足的解决方案
2021/05/25 Python
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技