编程技巧│浏览器 Notification 桌面推送通知
一、什么是 Notification
Notification 360

二、弹窗授权
- 授权当前页面允许通知
- 可以通过检查只读属性
Notification.permission
的值来查看你是否已经有权限 - default: 用户还未被询问是否授权,可以通过
Notification.requestPermission()
可以询问用户是否允许通知 - granted: 用户点击允许后的状态
- denied: 用户点击拒绝后的状态,通知框不可用
Notification.requestPermission()

三、弹窗使用
- 可以通过
new Notification($title, $options)
使用通知推送功能 - title: 一定会被显示的通知标题
- options: 可选,一个被允许用来设置通知的对象。它包含以下属性:
- dir: 文字的方向;它的值可以是 auto(自动), ltr(从左到右), or rtl(从右到左)
- lang: 指定通知中所使用的语言。
- body: 通知中额外显示的字符串
- tag: 赋予通知一个ID,以便在必要的时候对通知进行刷新、替换或移除。
- icon: 一个图片的URL,将被用于显示通知的图标。
new Notification("温馨提醒", { body: "飞兔小哥送你一份奖品待领取", icon: "https://autofelix.github.io/autofelix/u/favicon.ico", data: "https://autofelix.blog.csdn.net/" });
四、浏览器支持检测
"Notification" in window
function notify() { // 先检查浏览器是否支持 if (!("Notification" in window)) { alert("This browser does not support desktop notification"); } // 检查用户是否同意接受通知 else if (Notification.permission === "granted") { // If it's okay let's create a notification var notification = new Notification("Hi there!"); } // 否则我们需要向用户获取权限 else if (Notification.permission !== "denied") { Notification.requestPermission().then(function (permission) { // 如果用户接受权限,我们就可以发起一条消息 if (permission === "granted") { var notification = new Notification("Hi there!"); } }); } // 最后,如果执行到这里,说明用户已经拒绝对相关通知进行授权 // 出于尊重,我们不应该再打扰他们了 }
五、授权回调
- 该通知有四个回调方法
- onshow: 在通知展示的时候调用
- onclose: 在通知关闭的时候调用
- onclick: 在通知点击的时候调用
- onerror: 在通知出错的时候调用
var notification = new Notification("温馨提醒", { body: "飞兔小哥送你一份奖品待领取", icon: "https://autofelix.github.io/autofelix/u/favicon.ico", data: "https://autofelix.blog.csdn.net/" }); notification.onshow = function (event) { console.log("show : ", event); }; notification.onclose = function (event) { console.log("close : ", event); }; notification.onclick = function (event) { console.log("click : ", event); // 当点击事件触发,打开指定的url window.open(event.target.data) notification.close(); }; notification.onerror = function (event) { console.log("close : ", event); };
六、3秒后关闭弹窗
- 实现3秒后关闭弹窗的功能
var notification = new Notification('标题'); notification.onshow = function () { setTimeout(function () { notification.close(); }, 3000); }
「其他文章」
- Webpack学习系列 | Webpack 5 集成 HTML 插件高效解决文件路径问题
- 程序员如何利用技术能力变现
- Unity3D学习笔记8——GPU实例化(3)
- 分布式事务(Seata)原理 详解篇,建议收藏
- Spring 核心概念
- github package的使用教程
- ReentrantLock 公平锁源码 第2篇
- 庖丁解牛斐波拉契数列和背包问题——详细解析两个问题优化过程,带你从最基本的问题看懂动态规划!!!
- 0016:单源最短路径(dijkstra算法)
- Elasticsearch深度应用(下)
- Properties集合中的方法store和Properties集合中的方法load
- 写出个灵活的系统竟然可以如此简单!小白也能写出高级的Java业务!
- 【docker专栏1】docker解决的实际问题及应用场景
- Linux系列之文本操作命令
- JAVA中简单的for循环竟有这么多坑,你踩过吗
- Spring框架系列(13) - SpringMVC实现原理之DispatcherServlet的初始化过程
- Kafka KRaft模式探索
- Spring框架系列(3) - 深入浅出Spring核心之控制反转(IOC)
- 面试突击59:一个表中可以有多个自增列吗?
- 前端学习 linux —— 第一篇