java 推送消息页面_Notification API,为你的网页添加桌面通知推送
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,为你的网页添加桌面通知推送相关推荐
- tigase服务器推送消息,Tigase HTTP API 上一个 第8章。配置Tigase服务器以加载组件
执行临时命令 找到要使用的命令后,可以使用HTTP POST方法发送该命令.在此示例中,让我们请求一个活动用户列表,如上一节所述.注意:与前面的示例一样,这些命令需要基本的HTTP身份验证. 以下命令 ...
- 极光推送:java后台向APP推送消息(android,ios极光推送消息)
Maven添加依赖 <!--极光推送--><dependency><groupId>cn.jpush.api</groupId><artifact ...
- Android,ios,安卓app推送消息通知,java后台向手机推送app的通知教程
文章目录 一.业务介绍 1.1 产品简介 1.2 名词解释 1.3 消息推送流程 二.应用创建 三.客户端 SDK 集成 3.1 Android 3.2 iOS 四.服务端推送 4.1 服务端消息下发 ...
- 极光推送:后台向APP:android,ios极光推送消息
1. 添加依赖 //jpushcompile group: 'cn.jpush.api', name: 'jpush-client', version: '3.3.4' 2. 注册极光用户 //APP ...
- 插件实现了钉钉和企业微信推送消息
项目需要开发一个消息推送插件,今天整理一下做一个记录. 消息推送插件实现了钉钉和企业微信推送消息的功能. 首先介绍的是钉钉的实现方式: 1.需要在钉钉后台创建一个应用,并且需要记录下agentId.a ...
- APP推送消息测试点分析
APP推送消息测试点分析 1.虽然以前学测试的时候接触一点消息推送测试点,但是自己理解和掌握的测试点还不够深,由于工作需求,这两天深入了解和学了一下APP推送消息是什么,怎么测的问题 设计好的推送消息 ...
- html5 plus.push,HTML5+规范:Push(管理推送消息功能)
Push模块管理推送消息功能,可以实现在线.离线的消息推送,通过plus.push可获取推送消息管理对象. 1.方法 1.1.addEventListener: 添加推送消息事件监听器 void pl ...
- 【python】13行代码教你实现对微信进行推送消息
前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ Python居然可以实现给QQ邮箱.企业微信.微信等等软件推送消息!! 那么今天咱们就来实现一下Python直接给微信推送消息 ...
- 关于iOS自定义推送消息铃声
近期接触到一个项目,要求app在后台的时候,当app接收到推送消息时能播放一段音乐,正常的的推送消息逻辑只有当用户点击消息栏才能触发相关的方法,此时我就想到用自定义推送铃声的方法来解决这个问题. 推送 ...
最新文章
- python找列表list中某个数对应的索引值
- git add --all 为啥不能添加空文件夹,这样设计的初衷是
- 事件标志组解决任务间资源共享问题
- 神策数据《2022 中国企业数字化运营成熟度报告》发布
- Ubuntu 14.04.5 imx6 开发环境搭建
- CSS手写代码总结02
- Java中的字符串常量池详细介绍
- 时光手帐如何打印 时光手帐打印的方法
- TOP命令及参数解析
- 用框架名唬人谁都会,那你知道Web开发模式吗?——莫问前程莫装逼
- L1-036 A乘以B (5 分)—团体程序设计天梯赛
- SpringCloud下的springboot工程,访问jsp页面报404问题
- android怎么实现记住密码功能,Android学习笔记——记住密码的功能实现(一)
- php开发oa系统的插件下载不了,OA系统安装不了office控件的解决方法
- 惠普打印机故障代码_HP打印机通用报错代码含义及惠普打印机错误提示排除方法...
- 深入Tensorflow Embedding,解决Tensorboard无法显示PROJECTOR问题
- 面试问题 你如何评价你上一家公司,你觉的上一家公司怎么评价你
- 视频教程-计算机二级(VB)-计算机等级考试
- 记-玩吧-一次失败的面试
- [luogu P4230]连环病原体
热门文章
- 拆解飞机黑匣子,看看内部构造、PCB及芯片
- 2021考研报考人数377万,读研VS工作,哪个更值得?
- 他95年出生,却拥有10年编程经验
- 怎么增加android模拟器内存卡,增加android模拟器的内存大小
- java 当一个文本框有值时另一个文本框置灰_【农行DevOps进行时】基于PaaS的持续集成/持续交付实践 | IDCF...
- C# 算法题系列(一) 两数之和、无重复字符的最长子串
- 二柱子四则运算2.0版本
- 数学:莫比乌斯反演-约数个数和
- Mac下安装LNMP(Nginx+PHP5.6)环境
- EasyUI实现工地领款单项目