HTML5桌面通知:notification api

原文:HTML5桌面通知:notification api

1. 为什么需要HTML5的桌面通知

传统的桌面通知可以写一个div放到页面右下角自动弹出来,并通过轮询等等其他方式去获取消息并推送给用户。这种方式有个弊端就是:当我在使用京东进行购物的时候,我是不知道人人网有消息推送过来给我的,而必须要等我把当前页面切到人人网才知道有消息推送了。这种方式的消息推送它是基于页面存活的,但是我们需要这么一种策略:无论你在看哪个页面,只要有消息都应该能推送给我看到,这就是webkitNotification要解决的问题。Notification生成的消息不依附于某个页面,仅仅依附于浏览器。


2. 一个桌面通知生成的正常流程

我们先来看看一个桌面通知是如何生成的:

  1. 检查浏览器是否支持Notification
  2. 检查浏览器的通知权限(是否允许通知)
  3. 若权限不够则获取浏览器的通知权限
  4. 创建消息通知
  5. 展示消息通知
    NOTE:
    关于第一点的说明需要做一些说明,Notification目前还没有标准化,所以目前只支持chrome19+和safari6+;网上有资料显示Firefox26+也支持,但是我拿我的Firefox27检测的结果是无法支持。

3. notification api基础说明及代码示例

目前notification的实现有两种:一种是之前草案中的形式:webkitNotifications对象, 另一种就是未来标准化的形式:Notification对象。首先来说一下webkitNotifications所包含的内容:


3.1 webkitNotifications:

3.1.1. 静态方法

window.webkitNotifications.checkPermission()
//该方法返回0, 1, 2三个值,0代表PERMISSION_ALLOWED,即’允许’;1代表PERMISSION_NOT_ALLOWED,即不允许;2代表PERMISSION_DENIED,即拒绝
window.webkitNotifications.requestPermission()
//调用该方法将会在浏览器的信息栏弹出一个是否允许桌面通知的提醒,该方法只能由用户主动事件触发,如click 或 mouse over,也就是说你不能在document.ready里面直接调用该方法。
window.webkitNotifications.createNotification('icon-url','title', 'body' )
//调用该方法将返回一个实例化的webkitNotifications对象

PS:调用以上方法都会存在安全异常,也就是当前页面的permission是否为0。

3.1.2. 实例方法

notificationInstance.show()
//调用该方法将在右下角弹出一个通知窗口
notificationInstance.cancel()
//调用该方法将关闭通知窗口

3.2 Notification:

在chrome26+ 终端里面输入window.Notification并键入回车键,会发现这东西它也是存在的,根据某些博客的说法,这个Notification会是webkitNotifications的标准化形态(传说中的进化),这种方式的实现相对于webkitNotifications的实现更简洁,更面向对象一些。
构造函数:

Notification(title, options)
//@param {String} title 要显示的通知标题
//@param {Object} options 备选项参数,键值对
//option 结构如下
dictionary NotificationOptions {
  NotificationDirection dir = "auto";
  DOMString lang = "";
  DOMString body;
  DOMString tag;
  DOMString icon;//在实例化的时候会异步的去获取
};
//新建一个Notification实例,并根据permission为'granted'来完成notification的显示
var notification = new Notification('Hello Notification',{body:"I'm an enginneer!"});

3.2.1. 属性

静态属性:

Notification.Permission:

'default'
等同于拒绝
'denied'
意味着用户不想要通知
'granted'
意味着用户同意启用通知

Test:在chrome的地址栏里面输入http://www.baidu.com, 打开console,并在里面输入Notification.Permission 默认返回的是'default'.

Notes:该属性是只读的不能手动修改

  //在百度的首页打开console
  Notification.Permission = 'granted'
  Notification.Permission   //'default'
  

实例属性:

以下属性都需要在Notification实例上才能访问,为只读属性,并且就是通过option来赋值

Notification.dir    //
Notification.lang
Notification.Body   //通知的具体内容
Notification.tag    //实例化的notification的id
Notification.icon   //通知的缩略图

3.2.2 方法


静态方法

Notification.requestPermission()
```
//该方法将会询问用户是否允许显示通知
```
该方法不能由页面自主调用,必须由用户主动事件触发,还是以百度的页面为例,百度的搜索框的id为'kw':

//不通过事件触发直接调用
Notification.requestPermission()
//页面无反应

```Javascript
//通过用户主动事件触发来调用
document.getElementById('kw').onclick=function(){
Notification.requestPermission();
};
//页面信息栏会弹出询问用户是否允许显示桌面通知

```

Notes:当用户同意之后,再次调用该方法则无效,即该方法仅对Notification.Permission不为'granted'的时候起作用


实例方法

Notification.close()    //该方法允许通过代码控制关掉notification

Notes: Notification 没有实例方法show(),在Notification实例化的时候,浏览器就已经自动的去处理notification的显示过程了。

3.3 代码示例

以下代码将展示如何使用webkitNotification和Notification来显示桌面通知

3.3.1 webkitNotification

document.getElementById('notifyButton').onclick = function(){
    //判断浏览器是否支持notification
    if(window.webkitNotifications){
        //判断当前页面是否被允许发出通知
        if(webkitNotifications.checkPermission==0){
            var icon_url = 'http://www.w3.org/';
            var title = 'Hello HTML5';
            var body = 'I will be always here waiting for you!';
            var WebkitNotification = webkitNotifications.createNotification(icon_url, title, body);
            WebkitNotification.show();
        }else{
            document.getElementById('requestbutton').onclick = function () {
                webkitNotifications.requestPermission();
            };
        }
    }else alert("您的浏览器不支持桌面通知特性,请下载谷歌浏览器试用该功能");
};

3.3.2 Notification

document.getElementById('notifyButton').onclick = function () {
    if (window.Notification){
        if(Notification.Permission==='granted'){
            var notification = new Notification('Hello Notification',{body:"I hope that all the browser will support this\                   function!"});
        }else {
            document.getElementById('requestButton').onclick = function (){
                Notification.requestPermission();
            };
        };
    }else alert('你的浏览器不支持此特性,请下载谷歌浏览器试用该功能');
};

4. 参考文档

LINKS

------Written with Stack Edit

时间: 2024-12-02 14:14:31

HTML5桌面通知:notification api的相关文章

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

  在使用网页版Gmail的时候,每当收到新邮件,屏幕的右下方都会弹出相应的提示框.借助HTML5提供的Notification API,我们也可以轻松实现这样的功能. 确保浏览器支持 如果你在特定版本的浏览器上进行开发,那么我建议你先到 caniuse 查看浏览器对Notification API的支持情况,避免你将宝贵时间浪费在了一个无法使用的API上. 如何开始 JavaScript Code复制内容到剪贴板 var notification=new Notification('Notif

javascript实现下班倒计时效果的方法(可桌面通知)_javascript技巧

本文实例讲述了javascript实现下班倒计时效果的方法.分享给大家供大家参考.具体如下: 周末了,搞个下班倒计时,娱乐下. 确保下面三点: 1.非IE浏览器,较高Chrome版本,已开启HTML5桌面通知.具体设置见下面截图 2.将这个HTML放到本地Web服务器上测试,直接双击运行无法弹出桌面通知 顺带提下,这个程序很容易扩展成定时通知. 做这个东西的过程有两点比较纠结,总结下: 1.parseInt("09")返回的是0.正确做法是parseInt("09"

浏览器开启桌面通知Web Notification

本文主要描述如何开启各个浏览器的桌面通知功能 一.谷歌浏览器(chrome) 点击地址栏前面的图标 或者 ⓘ,修改通知即可 二.360浏览器 在地址栏输入 se://settings/content,找到通知进行设置 三.火狐浏览器(Mozilla Firefox) 您可以通过下列步骤设置站点的权限: 点击图标 打开 控制中心. 点击提示中的箭头. 点击 更多信息 打开页面信息窗口. 点击 权限 标签页. 在 接收通知 部分,选择:总是询问.允许 或 阻止.如果选项灰显,请取消勾选 使用默认 旁

javaScript中Notification API学习笔记

Notification API 是浏览器的通知接口,用于在用户的桌面上显示通知信息,桌面电脑和手机都适用.具体的实现形式由浏览器自行部署,对于手机来说,一般显示在顶部的通知栏. 如果网页代码调用这个API,浏览器会询问用户是否接受.只有在用户同意的情况下,通知信息才会显示. 一. 检查浏览器是否支持 Notification API: if (window.Notification) {     // 支持 } else {     // 不支持 } 二. Notification的权限申请:

notification-网站桌面通知是怎么回事?

问题描述 网站桌面通知是怎么回事? 如题,网站桌面通知是怎么回事啊,听说是chrom的专属是吗?IE等非webkit核心浏览器可不可以实现相同的功能呢? 解决方案 html5都支持,IE也支持http://blog.csdn.net/linshutao/article/details/18362111 解决方案二: http://stackoverflow.com/questions/6853941/webkit-desktop-notifications-in-iehttps://github

Android中通知Notification的使用方法_Android

每个使用Android手机的人应该对Android中的通知不陌生,下面我们就学习一下怎么使用Android中的通知. 一.通知的基本用法 活动.广播接收器和服务中都可以创建通知,由于我们一般在程序进入后台后才使用通知,所以真实场景中,一般很少在活动中创建通知. 1.第一行代码上面介绍的创建通知的方法 //获得通知管理器 NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_

html5获取地理位置信息API

html5获取地理位置信息API       在HTML5中,可以看下如何使用Geolocation API来获得用户的地理位置信息,如果该浏览器支持的话,且设备具有定位功能,就能够直接使用这组API来获取当前位置的信息,该API可以应用在移动设备上的地理定位:为window.navigator 对象新增了一个geolocation属性,可以使用Geolocation API来对该属性进行访问.window.navigator对象中的geolocation属性有三个方法如下: 第一个方法是:ge

HTML5全屏(Fullscreen)API详细介绍

  HTML5全屏(Fullscreen)API详细介绍          在越来越真实的web应用程序中,JavaScript也变得越来越给力. FullScreen API 是一个新的JavaScript API,简单而又强大. FullScreen 让我们可以通过编程的方式来向用户请求全屏显示,如果交互完成,随时可以退出全屏状态. 在线演示Demo: Fullscreen API Example (在此Demo中,可以Launch ,Hide ,以及Dump显示相关属性,可以通过chrom

钉钉电脑客户端设置中“桌面通知权限开启”的作用是?

  开启该功能后,群聊中@对应人,对应人电脑客户端右下角会展示相应的@信息;发起DING,接收人电脑客户端会收到DING的内容提醒;若关闭桌面通知权限,@和DING的消息不会通知提示.