使用HTML5的Notification API制作web通知的教程


Posted in HTML / CSS onMay 08, 2015

在使用网页版Gmail的时候,每当收到新邮件,屏幕的右下方都会弹出相应的提示框。借助HTML5提供的Notification API,我们也可以轻松实现这样的功能。
确保浏览器支持

如果你在特定版本的浏览器上进行开发,那么我建议你先到 caniuse 查看浏览器对Notification API的支持情况,避免你将宝贵时间浪费在了一个无法使用的API上。
如何开始
 

JavaScript Code复制内容到剪贴板
  1. var notification=new Notification(‘Notification Title',{  
  2.     body:'Your Message'   
  3. });   
  4.   

上面的代码构造了一个简陋的通知栏。构造函数的第一个参数设定了通知栏的标题,而第二个参数则是一个option 对象,该对象可设置以下属性:

  •     body :设置通知栏的正文内容。
        dir :定义通知栏文本的显示方向,可设为auto(自动)、ltr(从左到右)、rtl(从右到左)。
        lang :声明通知栏内文本所使用的语种。(译注:该属性的值必须属于BCP 47 language tag。)
        tag:为通知栏分配一个ID值,便于检索、替换或移除通知栏。
        icon :设置作为通知栏icon的图片的URL

获取权限

在显示通知栏之前需向用户申请权限,只有用户允许,通知栏才可出现在屏幕中。对权限申请的处理将有以下返回值:

  •     default:用户处理结果未知,因此浏览器将视为用户拒绝弹出通知栏。(“浏览器:你没要求通知,我就不通知你了”)
        denied:用户拒绝弹出通知栏。(“用户:从我的屏幕里滚开”)
        granted:用户允许弹出通知栏。(“用户:欢迎!我很高兴能够使用这个通知功能”)
       
       
JavaScript Code复制内容到剪贴板
  1. Notification.requestPermission(function(permission){   
  2.     //display notification here making use of constructor   
  3.     });   
  4.   

用HTML创建一个按钮
 

XML/HTML Code复制内容到剪贴板
  1. <button id="button">Read your notification</button>  
  2.   

不要忘记了CSS
 

CSS Code复制内容到剪贴板
  1. #button{   
  2.   font-size:1.1rem;   
  3.   width:200px;   
  4.   height:60px;   
  5.   border:2px solid #df7813;   
  6.   border-radius:20px/50px;   
  7.   background:#fff;   
  8.   color:#df7813;   
  9. }   
  10. #button:hover{   
  11.   background:#df7813;   
  12.   color:#fff;   
  13.   transition:0.4s ease;   
  14. }   
  15.   

全部的Javascript代码如下:
 

JavaScript Code复制内容到剪贴板
  1. document.addEventListener('DOMContentLoaded',function(){   
  2.         document.getElementById('button').addEventListener('click',function(){   
  3.             if(! ('Notification' in window) ){   
  4.                 alert('Sorry bro, your browser is not good enough to display notification');   
  5.                 return;   
  6.             }       
  7.             Notification.requestPermission(function(permission){   
  8.                 var config = {   
  9.                               body:'Thanks for clicking that button. Hope you liked.',   
  10.                               icon:'https://cdn2.iconfinder.com/data/icons/ios-7-style-metro-ui-icons/512/MetroUI_HTML5.png',   
  11.                               dir:'auto'  
  12.                               };   
  13.                 var notification = new Notification("Here I am!",config);   
  14.             });   
  15.         });   
  16.     });   
  17.   

从这段代码可以看出,如果浏览器不支持Notification API,在点击按钮时将会出现警告“兄弟,很抱歉。你的浏览器并不能很好地支持通知功能”(Sorry bro, your browser is not good enough to display notification)。否则,在获得了用户的允许之后,我们自制的通知栏便可以出现在屏幕当中啦。

为什么要让用户手动关闭通知栏?

对于这个问题,我们可以借助setTimeout函数设置一个时间间隔,使通知栏能定时关闭。
 

JavaScript Code复制内容到剪贴板
  1. var config = {   
  2.                body:'Today too many guys got eyes on me, you did the same thing. Thanks',   
  3.                icon:'icon.png',   
  4.                dir:'auto'  
  5.              }   
  6. var notification = new Notification("Here I am!",config);   
  7. setTimeout(function(){   
  8.     notification.close(); //closes the notification   
  9. },5000);   
  10.   

该说的东西就这些了。如果你意犹未尽,希望更加深入地了解Notification API,可以阅读以下的页面:

    MDN
    Paul lund’s tutorial on notification API

在CodePen上查看demo

你可以在CodePen上看到由Prakash (@imprakash)编写的demo。

HTML / CSS 相关文章推荐
用CSS禁用输入法(CSS3 UI规范)实例解析
Dec 04 HTML / CSS
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
Oct 10 HTML / CSS
一款纯css3实现的响应式导航
Oct 31 HTML / CSS
一款简洁的纯css3代码实现的动画导航
Oct 31 HTML / CSS
CSS3 不定高宽垂直水平居中的几种方式
Mar 26 HTML / CSS
CSS实现进度条和订单进度条的示例
Nov 05 HTML / CSS
利用纯html5绘制出来的一款非常漂亮的时钟
Jan 04 HTML / CSS
详解HTML5中表单验证的8种方法介绍
Dec 19 HTML / CSS
Html5原生拖拽相关事件简介以及基础实现
Nov 19 HTML / CSS
前端水印的简单实现代码示例
Dec 02 HTML / CSS
浅谈由position属性引申的css进阶讨论
May 25 HTML / CSS
Canvas如何做个雪花屏版404的实现
Sep 25 HTML / CSS
利用HTML5中的Canvas绘制一张笑脸的教程
May 07 #HTML / CSS
HTML5实现获取地理位置信息并定位功能
Apr 25 #HTML / CSS
HTML5 canvas标签实现刮刮卡效果
Apr 24 #HTML / CSS
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
Apr 24 #HTML / CSS
Html5+JS实现手机摇一摇功能
Apr 24 #HTML / CSS
HTML5 Canvas的事件处理介绍
Apr 24 #HTML / CSS
HTML5 audio标签使用js进行播放控制实例
Apr 24 #HTML / CSS
You might like
php面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
php列出一个目录下的所有文件的代码
2012/10/09 PHP
php自定义分页类完整实例
2015/12/25 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
2016/05/31 PHP
javascript radio 联动效果
2009/03/04 Javascript
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
2013/04/22 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
基于jQuery实现最基本的淡入淡出效果实例
2015/02/02 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
2015/11/27 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
关于jquery中attr()和prop()方法的区别
2018/05/28 jQuery
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
js继承的这6种方式!(上)
2019/04/23 Javascript
jQuery插件simplePagination的使用方法示例
2020/04/28 jQuery
微信小程序实现星星评分效果
2020/11/01 Javascript
Python进行数据科学工作的简单入门教程
2015/04/01 Python
Python实现的Excel文件读写类
2015/07/30 Python
Python读取文件内容的三种常用方式及效率比较
2017/10/07 Python
Python3学习urllib的使用方法示例
2017/11/29 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
Python交互环境下实现输入代码
2018/06/22 Python
详解django的serializer序列化model几种方法
2018/10/16 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
2019/03/30 Python
python二进制文件的转译详解
2019/07/03 Python
Python中文分词库jieba,pkusegwg性能准确度比较
2020/02/11 Python
python圣诞树编写实例详解
2020/02/13 Python
python map比for循环快在哪
2020/09/21 Python
Canvas多边形绘制的实现方法
2019/08/05 HTML / CSS
linux面试题参考答案(8)
2016/04/19 面试题
2014员工聘用协议书(最新版)
2014/11/24 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
餐厅服务员管理制度
2015/08/05 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书