HTML5 桌面通知:Notification API

article/2025/9/11 20:52:59

Notification API 是 HTML5 新增的桌面通知 API,用于向用户显示通知信息。该通知是脱离浏览器的,即使用户没有停留在当前标签页,甚至最小化了浏览器,该通知信息也一样会置顶显示出来。

用户权限

想要向用户显示通知消息,需要获取用户权限,而相同的域名只需要获取一次权限。只有用户允许的权限下,Notification 才能起到作用,避免某些网站的广告滥用 Notification 或其它给用户造成影响。那么如何知道用户到底是允不允许的?

Notification.permission 该属性用于表明当前通知显示的授权状态,可能的值包括:

  • default :不知道用户的选择,默认。
  • granted :用户允许。
  • denied :用户拒绝。
if(Notification.permission === 'granted'){console.log('用户允许通知');
}else if(Notification.permission === 'denied'){console.log('用户拒绝通知');
}else{console.log('用户还没选择,去向用户申请权限吧');
}

请求权限

当用户还没选择的时候,我们需要向用户去请求权限。Notification 对象提供了 requestPermission() 方法请求用户当前来源的权限以显示通知。
以前基于回调的语法已经弃用(当然在现在的浏览器中还是能用的),最新的规范已将此方法更新为基于 promise 的语法:

Notification.requestPermission().then(function(permission) {if(permission === 'granted'){console.log('用户允许通知');}else if(permission === 'denied'){console.log('用户拒绝通知');}
});

在这里插入图片描述

推送通知

获取用户授权之后,就可以推送通知了。
参数如下:

  • title:通知的标题
  • options:通知的设置选项(可选)。
  • body:通知的内容。
  • tag:代表通知的一个识别标签,相同tag时只会打开同一个通知窗口。
  • icon:要在通知中显示的图标的URL。
  • image:要在通知中显示的图像的URL。
  • data:想要和通知关联的任务类型的数据。
  • requireInteraction:通知保持有效不自动关闭,默认为false。
    还有一些其他的参数,因为用不了或者没什么用这里就没必要说了。
var n = new Notification('状态更新提醒',{body: '您有新的消息,快去查看吧',tag: 'linxin',icon: '/images/avatar.jpg',requireInteraction: true
})

通知消息的效果图如下:

关闭通知

从上面的参数可以看出,并没有一个参数用来配置显示时长的。我想要它 3s 后自动关闭的话,这时可以调用 close()方法来关闭通知。

var n = new Notification('状态更新提醒',{body: '你的朋友圈有3条新状态,快去查看吧'
})
setTimeout(function() {n.close();
}, 3000);

事件

Notification 接口的 onclick属性指定一个事件侦听器来接收 click 事件。当点击通知窗口时会触发相应事件,比如打开一个网址,引导用户回到自己的网站去。

var n = new Notification('状态更新提醒',{body: '你的朋友圈有3条新状态,快去查看吧',data: {url: 'http://localhost:8080/kefu'}
})
n.onclick = function(){window.open(n.data.url, '_blank');      // 打开网址n.close();                              // 并且关闭通知
}

应用场景

前面说那么多,其实就是为了用。那么到底哪些地方可以用到呢?

现在网站的消息提醒,大多数都是在消息中心显示个消息数量,然后发邮件告诉用户,这流程完全没有错。不过像我这种用户,觉得别人点个赞,收藏一下都要发个邮件提醒我,老是要去删邮件(强迫症),我是觉得挺烦的甚至关闭了邮件提醒。

当然这里并不是说要用 Notification,毕竟它和邮件的功能完全不一样。

我觉得比较适合的是新闻网站,聊天室网站。用户浏览新闻时,可以推送给用户实时新闻。以腾讯体育为例,它就使用了Notification API。在页面中引入了一个 notification2017_v0118.js,有兴趣可以看看别人是怎么成熟的使用的。

一进入页面,就获取授权,同时自己页面有个浮动框提示你允许授权。如果允许之后,就开始给你推送通知了。不过它在关闭标签卡的时候,通知也会被关闭,那是因为监听了页面 beforeunload 事件。

function addOnBeforeUnload(e) {FERD_NavNotice.notification.close();
}
if(window.attachEvent){window.attachEvent('onbeforeunload', addOnBeforeUnload);
} else {window.addEventListener('beforeunload', addOnBeforeUnload, false);
}

兼容

说到兼容,自然是倒下一大片,而且各浏览器的表现也会有点差异。移动端的几乎全倒,PC端的还好大多都能支持,除了IE。所以使用前,需要先检查一下浏览器是否支持 Notification


http://chatgpt.dhexx.cn/article/WR3XRRy9.shtml

相关文章

Android自定义Notification

Notification是一种让你的应用程序在不使用Activity的情况下警示用户,Notification是看不见的程序组件警示用户有需要注意的事件发生的最好途径。 作为UI部分,Notification对移动设备来说是最适合不过的了。用户可能随时都带着手机在身边。一般来说&…

Notification-通知

Notification-通知 通知是一种消息,这种消息呈现在应用UI之外,通过通知可以对用户进行提醒、可以和其他用户收发信息等。通过点击通知,可以唤起app页面或者直接在通知上执行一些操作。下面介绍通知的一些常用用法。 展示一条普通通知 先来…

全面解析Notification

Notification在Android中使用的频率可以说是非常高的,本篇博客,我将围绕着Notification的各方面进行解析,使大家对Notification有更好的认识。 Notification的使用步骤 1.获取NotificationManager NotificationManager mNotificationManager = (NotificationManager) get…

Android Notification使用

Android 通知栏适配 前言正文一、Android中通知的变化1. Android 4.1,API 162. Android 4.4,API 19 和 203. Android 5.0,API 214. Android 7.0,API 245. Android 8.0,API 266. Android 12.0,API 31 二、创…

Android之Notification的多种用法

我们在用手机的时候,如果来了短信,而我们没有点击查看的话,是不是在手机的最上边的状态栏里有一个短信的小图标提示啊?你是不是也想实现这种功能呢?今天的Notification就是解决这个问题的。 我们也知道Android系统也是…

Android--通知之Notification

前言 之前一篇博客讲了Android下使用Toast的方式提示消息。这篇博客讲解一下在Android中使用Notification提示消息给用户,Notification是一种具有全局效果的通知,程序一般通过NotificationManager服务来发送Notification。在本篇博客中,将介绍…

Android通知Notification使用全解析,看这篇就够了

1、效果 2、简介 通知是 Android 在您的应用 UI 之外显示的消息,用于向用户提供提醒、来自其他人的通信或来自您的应用的其他及时信息。用户可以点击通知打开您的应用或直接从通知中执行操作。 2.1、展示 通知以不同的位置和格式向用户显示,例如状态栏…

php cacti,cacti搭建遇到的那些事

最近闲的无聊,亲手操刀了一把整个生产环境cacti的搭建,时间消耗了3-4天,这里主要感谢网友老李、不想扮演逃兵、jiam的指导和帮助。下面就说说我搭建这个遇到的一些棘手的问题吧! 搭建完成的界面如下图: 系统环境&#…

cacti mysql_cacti监控mysql

1.MySQL stats模板 功能:用来监控MySQL状态,其中包括索引使用情况、查询、排序、锁定情况等。 1).将mysql_stats.php 和 dumpMemcachedStats.php脚本放到cacti脚本目录下(/usr/local/apache/htdocs/cacti/.s/),导入模板时注意选择cacti_host_…

cacti mysql 详解,cacti详解和基本配置

cacti简介: cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool存储和更新数据,当用户需要查看数据的时候就用rrdtool生成图表呈现给用户。snmp抓到的数据不是存储在mysql中,而是存在rrd…

cacti安装

1、搭建LNMP环境 http://blog.csdn.net/yang_xu_1987/article/details/77292340 #下面是按照源码搭建LNMP的方式,主要是路径不一样 2、安装rrd-tool、snmp相关包 yum install -y rrdtool net-snmp net-snmp-utils 3、安装cacti 下载cacti:http://down…

java cacti_开源的企业级监控系统 Cacti 简介

Cacti是一款网络流量监测图形分析工具,把LAMP的功能都结合起来,用于网络流量监控,操作起来非常方便!让我们认识下Cacti简介及工作流程。 一、Cacti简介 1. cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获…

安装cacti

1、搭建LAMP环境 yum -y install httpd mariadb mariadb-server mariadb-devel php php-mysql php-gd php-pear gd gd-devel systemctl start httpd && systemctl enable httpd systemctl start mariadb && systemctl enable mariadb 2、安装绘图工具和SNMP组…

Cacti安装及模板导入

文章目录 前言简介安装安装http以及php及php相关扩展安装数据库mariadb,配置yum源:安装snmp及其相关扩展(注意版本号得一致)安装绘图工具RRDTool绘图工具安装spine安装中文字体安装cacti初始化cacti 应用管理设备以及创建图形加入…

搭建cacti

1、搭建lamp环境 yum -y install httpd mariadb mariadb-server mariadb-devel php php-mysql php-gd php-pear gd gd-devel systemctl start httpd && systemctl enable httpd systemctl start mariadb && systemctl enable mariadb 2、安装绘图工具和snmp组件…

cacti php zombie,cacti 监控搭建

一、准备前工作 1.系统:centos 7.6 关闭seliunx及防火墙 关闭防火墙 systemctl disable firewalld.service #禁止firewall开机启动 关闭SELINUX setenforce 0 或 vim /etc/selinux/config 修改 SELINUXenforcing 改成 SELINUXdisabled 3.更新yum源 这个不再叙述 4.安…

java cacti_cacti监控安装

cacti是用PHP实现的一个软件,它用snmp服务获取数据,然后用rrdtool存储和更新数据,并生成图表展示。比较适合用于交换机、路由器的网络监控,插件众多,可图示化显示网络状况。 cacti官方推荐版本如下: PHP 5.…

mysql cacti_使用Cacti监控MySQL

本文将概述一些自己在使用中的问题(并不会给出step by step的使用介绍),以供参考,详细信息请留言。 既然别人的轮子已经很好用了,我自己就不发明了。使用Cacti可以较为快速搭建一个MySQL性能监控平台: Cacti是一个用于监控网络流量…

linux cacti 搭建,Cacti搭建部署

一、搭建lamp或者lnmp环境。 1、推荐使用:http://lnmp.org/一键安装lamp环境即可。 2、修改php配置:#vim /usr/local/php/etc/php.ini 取消305行注释 二、配置cacti#cd /usr/local/src #wget http://www.cacti.net/downloads/cacti-0.8.8h.tar.gz #tar zxvf cacti-0.8.8h.tar…

cacti监控

cacti监控 一、 使用RPM包配置LANP 1、 安装并配置apache、mariadb 1) 安装apache和mariadb数据库 [rootcentos01 ~]# rm -rf /etc/yum.repos.d/CentOS-* [rootcentos01 ~]# mount /dev/cdrom /mnt/ mount: /dev/sr0 写保护,将以只读方式挂载 [rootcent…