最近在和阿里云客服举行备案沟通的过程当中,经常看到阿里云能够在桌面上完成音讯推送,以为非常奇异,因而就举行了下搜刮进修;发明重要用到了Web Notification 来完成桌面音讯的推送详细道理以下:
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('用户谢绝关照');
}
});
推送关照
猎取用户受权以后,就能够推送关照了。
var notification = new Notification(title, options)
相干参数以下:
title:关照的题目
options:关照的设置选项(可选)。
body:关照的内容。
tag:代表关照的一个辨认标签,雷同tag时只会翻开同一个关照窗口。
icon:要在关照中显现的图标的URL。
image:要在关照中显现的图象的URL。
data:想要和关照关联的使命范例的数据。
requireInteraction:关照坚持有用不自动封闭,默许为false。
另有一些其他的参数,由于用不了或许没什么用这里就没必要说了。
var n = new Notification(‘状况更新提醒’,{
body: '你的朋友圈有3条新状况,快去查看吧',
tag: 'linxin',
icon: 'http://blog.gdfengshuo.com/images/avatar.jpg',
requireInteraction: true
})
关照音讯的效果图以下:
image
封闭关照
从上面的参数能够看出,并没有一个参数用来设置显现时长的。我想要它 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://blog.gdfengshuo.com'
}
})
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);
}