Notification API是浏览器的通知接口,用于在用户的桌面(而不是网页上)显示通知信息,桌面电脑和手机都适用,比如通知用户收到了一封Email。具体的实现形式由浏览器自行部署,对于手机来说,一般显示在顶部的通知栏。
如果网页代码调用这个API,浏览器会询问用户是否接受。只有在用户同意的情况下,通知信息才会显示。
检查浏览器是否支持这个API。
if (window.Notification) {
// 支持
} else {
// 不支持
}
Notification.permission属性,用于读取用户给予的权限,它是一个只读属性,它有三种状态。
- default:用户还没有做出任何许可,因此不会弹出通知。
- granted:用户明确同意接收通知。
- denied:用户明确拒绝接收通知。
Notification.requestPermission()方法用于让用户选择是否接收通知。它的参数是一个回调函数,该函数的参数为用户授权的状态。
Notification.requestPermission(function (status) {
if (status === "granted") {
// 用户同意了接收通知
} else {
// 用户拒绝接收通知
}
})
Notification对象作为构造函数使用时,用来生成一条通知。
var notification = new Notification('通知标题', options);
PS:options是一可选的配置对象,该对象的属性如下:
- dir:文字方向,可能的值为auto、ltr(从左到右)和rtl(从右到左),一般是继承浏览器的设置。
- lang:使用的语种,比如en-US、zh-CN。
- body:通知内容,格式为字符串,用来进一步说明通知的目的。
- tag:通知的ID,格式为字符串。一组相同tag的通知,不会同时显示,只会在用户关闭前一个通知后,在原位置显示。
- icon:图表的URL,用来显示在通知上。
具体案例:
test();
function test () {
if(!window.Notification || Notification.permission === "denied") return;
Notification.requestPermission(function (status) {
if (status === "granted") {
var n = new Notification('通知标题', {
body: '需要通知的内容'
});
n.onclick = function () {
console.log('用户点击了通知');
}
n.onshow = function () {
setTimeout(() => n.close(), 5000);
}
} else {
alert("已拒绝接收通知");
}
});
}
PS:在生产环境一定要用https访问,不然浏览器不会支持通知功能