Notification 是什么

MDN:

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

其实,MDN 的说明已经可以让我们很清楚知道 Notification 的作用。Notification 能够为用户提供异步的桌面消息通知,即使你缩小浏览器或是活动在其他标签页,只要调用该 Api 的标签页没被关闭,它都能工作。在桌面端的浏览器中,除了 IE 不支持外,其他就均已支持。

状态值

permission:

只读属性,表示当前显示通知权限的字符串,为以下值:

denied: 拒绝显示通知

granted: 接受显示通知

default: 未选择,浏览器默认将其当作拒绝的行为

Notification.permission

授权

requestPermission:

向用户请求显示通知的权限。只有当 permission 的值为 default 时调用此方法,右上角才会显示授权弹窗。如果用户此前已选择过,那么再次调用直接返回状态值。

Notification.requestPermission().then(res => {

// denied 或 granted

console.log(res)

})

需要注意的是,用户如果选择拒绝后,再次调用也不会弹出授权提示。想要再次更改状态,只能由用户手动设置:

第一种:点击地址栏前的小按钮(感叹号或小锁),设置通知状态

第二种:chrome 浏览器右上角 设置 >> 隐私设置和安全性 >> 网站设置 >> 通知

构造实例

new Notification(title[,options])

当用户允许授权后,构造实例后,浏览器就会弹窗提示。

let notification = new Notification('通知标题', {

// 正文内容

body: '已经错过的风景就不要再打听了,当你选定了一个方向,另一边的风景便与你无关了。',

// 图标

icon: 'https://common.cnblogs.com/images/wechat.png',

// 预览大图

image: 'https://user-gold-cdn.xitu.io/2020/5/18/1722800bd522f520?imageView2/1/w/1304/h/734/q/85/format/webp/interlace/1',

// 通知id

tag: 1,

// 是否一直保持有效

requireInteraction: true

})

tag:

通知的ID,默认 tag 为空。当 tag 相同时,重复构造实例,新通知会替换旧通知。反之,通知不会替换,而是像楼层一样叠加。同样的,忽略 tag 属性,通知也不会替换。

requireInteraction:

通知是否保持,不会自动关闭。默认为 false,会自动关闭。当设置为 true 时,由用户手动关闭或调用实例的 close 方法进行关闭。

notification.close()

事件处理

监听用户点击通知时,可以为实例添加事件:

let notification = new Notification('通知标题', {

body: '已经错过的风景就不要再打听了,当你选定了一个方向,另一边的风景便与你无关了。',

icon: 'https://common.cnblogs.com/images/wechat.png',

image: 'https://user-gold-cdn.xitu.io/2020/5/18/1722800bd522f520?imageView2/1/w/1304/h/734/q/85/format/webp/interlace/1',

tag: 1

})

notification.onclick = function (){

alert('用户点击了通知')

}

如果想要在事件内获取一些自定义参数信息,可以为实例添加 data 属性:

let notification = new Notification('通知标题', {

body: '已经错过的风景就不要再打听了,当你选定了一个方向,另一边的风景便与你无关了。',

icon: 'https://common.cnblogs.com/images/wechat.png',

image: 'https://user-gold-cdn.xitu.io/2020/5/18/1722800bd522f520?imageView2/1/w/1304/h/734/q/85/format/webp/interlace/1',

tag: 1,

data: {

url: 'https://juejin.im'

}

})

notification.onclick = function (e){

window.open(e.target.data.url, '_blank')

}

实例上还可以绑定事件 show(显示通知时触发) 、close(关闭通知时触发)、error(通知错误时触发)。

MDN 文档上提示,onshow 和 onclose 是一个过时的API,不保证可以正常工作。但在 chrome 浏览器测试使用这两个 API,还是能够工作的,最好还是慎用吧。

封装Notification

为了方便调用,简单封装创建 Notification 的方法,在原基础上加入消息时长配置

/*

* @param {string} title - 消息标题

* @param {object} options - 消息配置

* @param {number} duration - 消息时长

* @param {function} onclick

* @param {function} onshow

* @param {function} onclose

* @param {function} onerror

* @return {object}

*/

async function createNotify(data){

// 一些判断

if (window.Notification) {

if (Notification.permission === 'granted') {

return notify(data)

} else if (Notification.permission === 'default') {

let [err, status] = await Notification.requestPermission().then(status => [null, status]).catch(err => [err, null])

return err || status === 'denied' ? Promise.reject() : notify(data)

}

}

// 构造实例

function notify(data){

let { title, options, duration } = data

options.requireInteraction = true

let notification = new Notification(title, options)

setTimeout(()=> notification.close(), duration || 5000)

// 绑定事件

let methods = ['onclick', 'onshow', 'onclose', 'onerror']

for(let i = 0; i

let method = methods[i]

if (typeof options[method] === 'function') {

notification[method] = options[method]

}

}

return notification

}

return Promise.reject()

}

使用

createNotify({

title: '标题',

options: {

body: '消息内容'

},

duration: 3000

})

浏览器支持

PC 端支持还不错,移动端就基本一片红了...

java 推送消息页面_Notification API,为你的网页添加桌面通知推送相关推荐

  1. tigase服务器推送消息,Tigase HTTP API 上一个 第8章。配置Tigase服务器以加载组件

    执行临时命令 找到要使用的命令后,可以使用HTTP POST方法发送该命令.在此示例中,让我们请求一个活动用户列表,如上一节所述.注意:与前面的示例一样,这些命令需要基本的HTTP身份验证. 以下命令 ...

  2. 极光推送:java后台向APP推送消息(android,ios极光推送消息)

    Maven添加依赖 <!--极光推送--><dependency><groupId>cn.jpush.api</groupId><artifact ...

  3. Android,ios,安卓app推送消息通知,java后台向手机推送app的通知教程

    文章目录 一.业务介绍 1.1 产品简介 1.2 名词解释 1.3 消息推送流程 二.应用创建 三.客户端 SDK 集成 3.1 Android 3.2 iOS 四.服务端推送 4.1 服务端消息下发 ...

  4. 极光推送:后台向APP:android,ios极光推送消息

    1. 添加依赖 //jpushcompile group: 'cn.jpush.api', name: 'jpush-client', version: '3.3.4' 2. 注册极光用户 //APP ...

  5. 插件实现了钉钉和企业微信推送消息

    项目需要开发一个消息推送插件,今天整理一下做一个记录. 消息推送插件实现了钉钉和企业微信推送消息的功能. 首先介绍的是钉钉的实现方式: 1.需要在钉钉后台创建一个应用,并且需要记录下agentId.a ...

  6. APP推送消息测试点分析

    APP推送消息测试点分析 1.虽然以前学测试的时候接触一点消息推送测试点,但是自己理解和掌握的测试点还不够深,由于工作需求,这两天深入了解和学了一下APP推送消息是什么,怎么测的问题 设计好的推送消息 ...

  7. html5 plus.push,HTML5+规范:Push(管理推送消息功能)

    Push模块管理推送消息功能,可以实现在线.离线的消息推送,通过plus.push可获取推送消息管理对象. 1.方法 1.1.addEventListener: 添加推送消息事件监听器 void pl ...

  8. 【python】13行代码教你实现对微信进行推送消息

    前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ Python居然可以实现给QQ邮箱.企业微信.微信等等软件推送消息!! 那么今天咱们就来实现一下Python直接给微信推送消息 ...

  9. 关于iOS自定义推送消息铃声

    近期接触到一个项目,要求app在后台的时候,当app接收到推送消息时能播放一段音乐,正常的的推送消息逻辑只有当用户点击消息栏才能触发相关的方法,此时我就想到用自定义推送铃声的方法来解决这个问题. 推送 ...

最新文章

  1. python找列表list中某个数对应的索引值
  2. git add --all 为啥不能添加空文件夹,这样设计的初衷是
  3. 事件标志组解决任务间资源共享问题
  4. 神策数据《2022 中国企业数字化运营成熟度报告》发布
  5. Ubuntu 14.04.5 imx6 开发环境搭建
  6. CSS手写代码总结02
  7. Java中的字符串常量池详细介绍
  8. 时光手帐如何打印 时光手帐打印的方法
  9. TOP命令及参数解析
  10. 用框架名唬人谁都会,那你知道Web开发模式吗?——莫问前程莫装逼
  11. L1-036 A乘以B (5 分)—团体程序设计天梯赛
  12. SpringCloud下的springboot工程,访问jsp页面报404问题
  13. android怎么实现记住密码功能,Android学习笔记——记住密码的功能实现(一)
  14. php开发oa系统的插件下载不了,OA系统安装不了office控件的解决方法
  15. 惠普打印机故障代码_HP打印机通用报错代码含义及惠普打印机错误提示排除方法...
  16. 深入Tensorflow Embedding,解决Tensorboard无法显示PROJECTOR问题
  17. 面试问题 你如何评价你上一家公司,你觉的上一家公司怎么评价你
  18. 视频教程-计算机二级(VB)-计算机等级考试
  19. 记-玩吧-一次失败的面试
  20. [luogu P4230]连环病原体

热门文章

  1. 拆解飞机黑匣子,看看内部构造、PCB及芯片
  2. 2021考研报考人数377万,读研VS工作,哪个更值得?
  3. 他95年出生,却拥有10年编程经验
  4. 怎么增加android模拟器内存卡,增加android模拟器的内存大小
  5. java 当一个文本框有值时另一个文本框置灰_【农行DevOps进行时】基于PaaS的持续集成/持续交付实践 | IDCF...
  6. C# 算法题系列(一) 两数之和、无重复字符的最长子串
  7. 二柱子四则运算2.0版本
  8. 数学:莫比乌斯反演-约数个数和
  9. Mac下安装LNMP(Nginx+PHP5.6)环境
  10. EasyUI实现工地领款单项目