2019独角兽企业重金招聘Python工程师标准>>>

先看效果:

image.png

这是利用html5桌面通知Notification API实现的,先看看代码,再分析Notification。

// 桌面通知(() => {// 请求权限Notification.requestPermission().then(function(permission) {if(permission === 'granted'){console.log('用户允许通知了');}else if(permission === 'denied'){console.log('用户拒绝通知了');}});// 推送通知let n = new Notification('欢迎浏览',{body: '点击获取更多福利',tag: 'geekjc',icon: 'https://geekjc-img.geekjc.com/chudian01.jpg',requireInteraction: true,data: {url: 'https://www.geekjc.com/apdl'}})// 定时关闭通知setTimeout(() => {n.close()},10000)// 点击n.onclick = () => {window.open(n.data.url, '_blank');      // 打开网址n.close();                              // 并且关闭通知}})()

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

1. 用户权限

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

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

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

2. 请求权限

当用户还没选择的时候,我们需要向用户去请求权限。Notification 对象提供了 requestPermission() 方法请求用户当前来源的权限以显示通知。

以前基于回调的语法已经弃用(当然在现在的浏览器中还是能用的),最新的规范已将此方法更新为基于 promise 的语法:

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

3. 推送通知

获取用户授权之后,就可以推送通知了。

var notification = new Notification(title, options)

参数如下:

  • title:通知的标题
  • options:通知的设置选项(可选)。
    • body:通知的内容。
    • tag:代表通知的一个识别标签,相同tag时只会打开同一个通知窗口。
    • icon:要在通知中显示的图标的URL。
    • image:要在通知中显示的图像的URL。
    • data:想要和通知关联的任务类型的数据。
    • requireInteraction:通知保持有效不自动关闭,默认为false。
      还有一些其他的参数,因为用不了或者没什么用这里就没必要说了。
 let n = new Notification('欢迎浏览',{body: '点击获取更多福利',tag: 'geekjc',icon: 'https://geekjc-img.geekjc.com/chudian01.jpg',requireInteraction: true,data: {url: 'https://www.geekjc.com/apdl'}})

4. 关闭通知

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

// 定时关闭通知setTimeout(() => {n.close()},10000)

5. 事件

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

// 点击n.onclick = () => {window.open(n.data.url, '_blank');      // 打开网址n.close();                              // 并且关闭通知}

6. 应用场景

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

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

当然这里并不是说要用 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);

7. 兼容

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

原文地址

转载于:https://my.oschina.net/cllgeek/blog/1584718

HTML5 桌面通知:Notification API 的应用相关推荐

  1. 安卓html5桌面提醒,HTML5桌面通知提示功能的实现

    HTML5赋予网页更好的意义和结构.更加丰富的标签将随着对RDFa的,微数据与微格式等方面的支持,构建对程序.对用户都更有价值的数据驱动的Web.本文我们就和大家分享HTML5实现桌面通知提示功能. ...

  2. HTML5 桌面通知 new Notification

    1.背景:  房产咨询,用户和房博士聊天,当发送聊天消息时,需要做收到消息通知,最后查到HTML5新增的 Notification API的通知功能.即使将浏览器窗口最小化,依然会收到消息通知. 2. ...

  3. js 浏览器桌面通知notification

    Notification是HTML5新增的API,用于向用户配置和显示桌面通知.上次在别的网站上看到别人的通知弹窗,好奇之余也想知道如何实现的.实际去查一下发现并不复杂,且可以说比较简单,故写篇博客分 ...

  4. html5桌面通知自动关闭时间,H5 notification浏览器桌面通知

    Notification是HTML5新增的API,用于向用户配置和显示桌面通知.上次在别的网站上看到别人的通知弹窗,好奇之余也想知道如何实现的.实际去查一下发现并不复杂,且可以说比较简单,故写篇博客分 ...

  5. html5 推送到桌面,Html5中的桌面通知Notification的实现

    前言:对于一个前段开发者,逛网页总会留意一些新奇的功能,对于上班总会用到Teambition的我,总是能收到Notification...所以今天就来研究下这个H5功能... 1. 实例一个Notif ...

  6. php通知前端,HTML5桌面通知提示功能的实现

    HTML5赋予网页更好的意义和结构.更加丰富的标签将随着对RDFa的,微数据与微格式等方面的支持,构建对程序.对用户都更有价值的数据驱动的Web.本文我们就和大家分享HTML5实现桌面通知提示功能. ...

  7. H5的Notification特性 - Web的桌面通知功能

    本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/49 H5的Notification特性 - Web的桌 ...

  8. HTML5中的Web Notification桌面通知(右下角提示)

    html5桌面通知(Web Notifications)对于需要实现在新消息入线时,有桌面通知效果的情况下非常有用,在此简单介绍一下这个html5的新属性.通过Web Notifications(桌面 ...

  9. H5 notification浏览器桌面通知

    Notification是HTML5新增的API,用于向用户配置和显示桌面通知.上次在别的网站上看到别人的通知弹窗,好奇之余也想知道如何实现的.实际去查一下发现并不复杂,且可以说比较简单,故写篇博客分 ...

最新文章

  1. 调用 GetProcAddress 失败,在 ISAPI 筛选器 C:\Windows\Microsoft.NET...
  2. dart系列之:在dart中使用packages
  3. 设计模式_单实体模式
  4. [leetcode]347. Top K Frequent Elements
  5. mysql 排名_MySQL和Hive中的排名问题
  6. java 箭头函数_箭头函数丶Java教程网-IT开发者们的技术天堂
  7. Apache ActiveMQ
  8. 如何在苹果Mac上快速将表情符号添加到电子邮件?
  9. 好用的在线开发辅助工具
  10. 应用于手机触摸屏中的电容式触摸芯片
  11. CCF CSP 数据中心 c++ python csp201812_4 100分
  12. 基于Python爬取天眼查网站的企业信息
  13. 百度地图 LBS API 使用
  14. QNX和linux的区别 -- qnx4.0 内核介绍 -- 微内核 -- qnx与vxworks区别
  15. 9月最新版 H5移动棋牌游戏联运推广平台移动游戏系统源代码下载(带安装说明)
  16. python中-是什么意思
  17. 蚂蚁金服副总谈区块链
  18. 收敛域、收敛区间与收敛半径
  19. 【老沙讲坛】系列之非技术面试题汇总目录
  20. etc通行费发票怎么打印?通行费发票打印步骤

热门文章

  1. ubuntu18.04 wifi适配器打不开解决办法
  2. 互联网式焦虑:莫名其妙优越感
  3. 硅谷硬核Rasa课程、Rasa培训、Rasa面试系列之: Rasa 3.x rasa test等运行命令学习
  4. html怎么把四张图片放在,如何把Word里的四张图片放在一页上
  5. 教你如何把MP4视频批量分割并生成m3u8文件的方法
  6. 使命召唤 计算机配置,使命召唤17电脑配置要求高吗 COD17最低配置介绍_游侠网...
  7. 辞旧迎新:元旦,春节放假通知
  8. 【力扣】复制带随机指针的链表题解 C语言实现
  9. win10玩cf不能全屏_5千左右预算,2020年畅玩吃鸡、魔兽、LOL、CF、炉石传说、逆水寒,高性价台式电脑推荐/选购指南...
  10. java关于23种设计模式之泡MM版(推荐)