Javascript桌面通知Notification API

/ 1评 / 0

相信经常使用谷歌产品的都经常会受到来自浏览器的通知,如邮件或者关注的youtube更新等。

桌面通知功能能够让浏览器即使是最小化的状态,也能将消息通知给用户。

这种通知,用户可以自己选择是否接受该网站的通知,并且整体UI风格统一,个人认为非常适合资讯类和视频类网站。

不得不说,浏览器的生态越来越完美了,这对前端来说是非常有利的。电脑端较为常用的浏览器几乎都支持了, 比较可惜的是手机端几乎没有支持这个特性的。

下面我们开始吧!

判断权限

打开之前判断自己有没有权限,注意要对不支持的浏览器做好兼容性处理。

//对没有提供接口的浏览器处理
try{
    if(Notification.permission === 'granted'){
        //已授权
    }else if(Notification.permission === 'denied'){
        //拒绝
    }else{
        //未询问
    }
}
catch(e){
    //该浏览器不支持
}

请求权限

咱不是流氓软件,凡是会打扰到用户的,都得用户同意才行是不是。
别担心,相同的域名只需要获取一次权限就可以一直使用。

//获取通知权限的方法,结果通过promise返回
//granted同意;denied拒绝
Notification.requestPermission().then(function(permission) {
    if(permission === 'granted'){
        console.log('用户允许通知');
    }else if(permission === 'denied'){
        console.log('用户拒绝通知');
    }
    init();
});

发送通知

如果用户授权,就可以调用通知的方法了。

记得,如果设置requireInteraction为true要记得关闭哈!

var n = new Notification('通知来啦',{
    body: '这是一个通知', //通知的文字内容
    tag: 'a', //通知的分类,同一tag的内容同一时间只会显示一个窗口
    icon: 'iconUrl', //通知的图标
    requireInteraction: true //通知保持有效不自动关闭,默认为false
})
//设置了requireInteraction需要自己配置关闭通知
setTimeout(function() {
    n.close();
}, 10000);

var n = new Notification('通知来啦',{
    body: '看,你已经可以接受通知啦,点击可以进入我的博客哟!',
    tag: 'a',
    icon: 'http://secure.gravatar.com/avatar/14c889100dc44646b7da2344e2a2a375?s=32&d=mm&r=g',
    requireInteraction: true
})
setTimeout(function() {
    n.close();
}, 10000);

效果如下:

点击跳转url

细心的小伙伴们可能发现了,我在通知中写了点击可以进入我的博客哟。

别急,我们这就来实现!

//如果用户点击通知,为他跳转网页并关闭通知窗口
n.onclick = function(){
    window.open("http://blog.mokevip.top", '_blank');      // 打开网址
    n.close();                              // 并且关闭通知
}

总结

大致流程如下:

示例:http://www.mokevip.top/message.html

官方文档:https://developer.mozilla.org/zh-CN/docs/Web/API/Notification

简约demo代码:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>js浏览器通知示例</title>
</head>

<body>
<h1 id="msg">您将会收到一条通知</h1>
<script>
	init();
	
	//获取用户通知权限
	function getPower(){
		//获取通知权限的方法,结果通过promise返回
		Notification.requestPermission().then(function(permission) {
		    if(permission === 'granted'){
		        console.log('用户允许通知');
		    }else if(permission === 'denied'){
		        console.log('用户拒绝通知');
		    }
		    init();
		});
	}
	
	//初始化,判断用户权限
	function init(){
			//对没有提供接口的浏览器处理
			try{
				if(Notification.permission === 'granted'){
				    document.getElementById("msg").innerHTML="您将会收到一条通知"
				    
				    //通过创建实例完成通知,保存实例可以进行下一步操作
				    var n = new Notification('通知来啦',{
					    body: '看,你已经可以接受通知啦,点击可以进入我的博客哟!', //通知的文字内容
					    tag: 'a', //通知的分类,同一tag的内容同一时间只会显示一个窗口
					    icon: 'http://secure.gravatar.com/avatar/14c889100dc44646b7da2344e2a2a375?s=32&d=mm&r=g', //通知的图标
					    requireInteraction: true //通知保持有效不自动关闭,默认为false
					})
					
					//10秒后关闭通知
					setTimeout(function() {
					    n.close();
					}, 10000);
					
					//如果用户点击通知,为他跳转网页并关闭通知窗口
					n.onclick = function(){
					    window.open("http://blog.mokevip.top", '_blank');      // 打开网址
					    n.close();                              // 并且关闭通知
					}
				}else if(Notification.permission === 'denied'){
				    document.getElementById("msg").innerHTML="您已拒绝通知权限"
				}else{
				    document.getElementById("msg").innerHTML="同意权限你就可以接收到通知啦!"
				    getPower()
				}
			}
			catch(e){
				document.getElementById("msg").innerHTML="该浏览器不支持通知信息"
			}
	}
</script>
</body>
</html>

文章就到这里啦,如果你喜欢,欢迎留言支持!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注