基于Web Notification的前端桌面弹窗

 最近在和阿里云客服举行备案沟通的过程当中,经常看到阿里云能够在桌面上完成音讯推送,以为非常奇异,因而就举行了下搜刮进修;发明重要用到了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);

}

    原文作者:晓晨不晓晨
    原文地址: https://segmentfault.com/a/1190000019184247
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞