简介

Web Notifications目前在w3c的协议中已经是“推荐”(REC:Recommendation)阶段,除了iE外,各大现代浏览器都对这个桌面推送有了基本的支持。这都代表我们现在可以很好的在应用中使用桌面推送的特性。在移动端浏览器方面,可能因为平台的权限限制的原因目前只有firefox积极地支持这个属性。Web Notifications也能很好的工作在web workers中。

常用API

  • Notification.permission

    使用 Web Notifications之前要向用户申请权限,Notification.permission属性是一个只读属性表示当前站点Web Notifications的状态,它有三个值defaultgranteddenied,在用户没有给予权限时,即站点的默认状态一般是default,仅在这个状态时,可以使用Notification.requireInteraction 向用户申请权限,用户会在浏览器上看到一个 Web Notifications权限的确认框,选择Notification.permission属性改变为granted表示用户允许使用Web Notifications,Notification.permission属性改变为denied表示用户禁止使用Web Notifications,并且不可再向用户申请权限。

    Safari (较旧版)和 Chrome (在 32 版本之前) 还没有实现 permission 属性。

  • Notification.requestPermission

    向用户申请权限函数,仅在Notification.permission状态为default时候生效。其他状态浏览器为了友好的用户体验不会再向用户请求权限,用户如果想要修改权限需要手动设置权限

    Notification.requestPermission有两种写法:

    • 对于比较新的浏览器,使用基于promise的语法

                Notification.requestPermission().then(function(permission) { ... });
    • 对于比较旧的浏览器,使用回调函数(Safari某些较新版本也需要使用回调函数)

                Notification.requestPermission(callback);
  • Notification 实例常用属性

    首先这里是一个简单的Notification实例:

    var notification = new Notification(title, {
    body: '...',
    icon: '...',
    sound :'...'
    });

    Notification.title 消息的主题

    Notification.icon 消息体的图标

    Notification.body 消息体的内容

    Notification.sound 消息体提示的声音(支持性很低)

  • Notification 实例相关事件

      Notification.onclick<br>
    Notification.onerror<br>
    Notification.onclose<br>
    Notification.onshow<br>
  • 一个demo的代码

 if (window.Notification) {

                    var ua = navigator.userAgent.toLowerCase();
if (ua.indexOf('safari') != -1) {
if (ua.indexOf('chrome') > -1) {
// Chrome
Notification.requestPermission().then(function(permission) {
if (permission == "granted") {
var notification = new Notification('桌面推送', {
body: '这是我的第一条桌面推送',
icon: 'some/icon/url'
}); notification.onclick = function() { console.log('点击');
notification.close();
};
} else {
Notification.requestPermission();
console.log('没有权限,用户拒绝:Notification');
}
});
} else {
// Safari
Notification.requestPermission(function(permission) {
if (permission == "granted") {
var notification = new Notification('桌面推送', {
body: '这是我的第一条桌面推送',
icon: 'some/icon/url'
}); notification.onclick = function() { console.log('点击');
notification.close();
};
} else {
Notification.requestPermission();
console.log('没有权限,用户拒绝:Notification');
}
})
}
} } else {
console.log('不支持Notification');
}

手动设置权限

chrome用户请在 "设置->隐私设置->内容设置->通知"选择网站域名点击允许

其他浏览器类似,请自己google

HTML5 Web Notifications 桌面推送小记的更多相关文章

  1. 基于Web的数据推送技术(转)

    基于Web的数据推送技术 对于实时性数据显示要求比较高的系统,比如竞价,股票行情,实时聊天等,我们的解决方案有以下几种.1. HTTP请求发送模式,一般可以基于ajax的请求,比如每3秒一次访问下服务 ...

  2. SSE(Server-sent events)技术在web端消息推送和实时聊天中的使用

    最近在公司闲着没事研究了几天,终于搞定了SSE从理论到实际应用,中间还是有一些坑的. 1.SSE简介 SSE(Server-sent events)翻译过来为:服务器发送事件.是基于http协议,和W ...

  3. NET Core2基于RabbitMQ对Web前端实现推送功能

    NET Core2基于RabbitMQ对Web前端实现推送功能 https://www.cnblogs.com/Andre/p/10012329.html 在我们很多的Web应用中会遇到需要从后端将指 ...

  4. 我有 7种 实现web实时消息推送的方案,7种!

    技术交流,公众号:程序员小富 大家好,我是小富- 我有一个朋友- 做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能. 不过他还没想好用什么方式做,这里 ...

  5. Web端服务器推送技术原理分析及dwr框架简单的使用

    1 背景 “服务器推送技术”(ServerPushing)是最近Web技术中最热门的一个流行术语.它是继“Ajax”之后又一个倍受追捧的Web技术.“服务器推送技术”最近的流行跟“Ajax ”有着密切 ...

  6. HTML5中的服务器‘推送’技术 -Server-Sent Events

    转帖:http://www.developersky.net/thread-63-1-1.html 一直以来,HTTP协议都是严格遵循Request-Response模型的.客户端发送一个Reques ...

  7. Web端server推送技术原理分析及dwr框架简单的使用

    1 背景 "server推送技术"(ServerPushing)是近期Web技术中最热门的一个流行术语.它是继"Ajax"之后又一个倍受追捧的Web技术.&qu ...

  8. [html5] 学习笔记-服务器推送事件

    1.HTML5服务器推送事件介绍 服务器推送事件(Server-sent Events)是Html5规范的一个组成部分,可以用来从服务端实时推送数据到浏览器端. 传统的服务器推送技术----WebSo ...

  9. 基于HTTP协议之WEB消息实时推送技术原理及实现

    很早就想写一些关于网页消息实时推送技术方面的文章,但是由于最近实在忙,没有时间去写文章.本文主要讲解基于 HTTP1.1 协议的 WEB 推送的技术原理及实现.本人曾经在工作的时候也有做过一些用到网页 ...

随机推荐

  1. website for personal research

    YOLO https://pjreddie.com/darknet/yolo/ Low Rank Matrix Recovery and Completion via Convex Optimizat ...

  2. python knn自我实践

    #得到分类数据和测试数据 import pymysql import struct from numpy import * a=['']*20 #存图像 分类数据 b=[[0]*76800]*20#存 ...

  3. HDU 5167 Fibonacci 筛法+乱搞

    题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5167 题意: 给你一个x,判断x能不能由斐波那契数列中的数相乘得到(一个数可以重复使用) ...

  4. Struts2:Struts2在jsp中使用标签时值的获取

    在OGNL的使用中,需要访问一系列的对象,这些对象放在OGNL的context中,context是一个Map结构,实际上它和ActionContext是相应的. 当用户发送请求时,struts会创建A ...

  5. MySQL 基于lvm2的备份实战演练 (快照备份)

    前言: lvm2实现热备的原理是基于lvm2的快照功能,lvm2可以实现数据集不大的情况下的热备. 实战过程如下:这里的演示是在一台Mariadb服务器上进行创建快照,将快照中的文件scp到备份服务器 ...

  6. HDU 2105 The Center of Gravity

    http://acm.hdu.edu.cn/showproblem.php?pid=2105 Problem Description Everyone know the story that how ...

  7. Vue于React特性对比(二)

    一,关于响应式数据更新方式的实现 1)只有在data里面定义的数据才会有响应式更新 vue依赖的defineProperty的数据劫持加上依赖数据,实现数据的响应式更新.可以称之为依赖式的响应.因为依 ...

  8. vue.cli实现tab切换效果

    <template> <div class="cp-select">                     <div class="lef ...

  9. post和updatebatch区别 delphi

    Post是确认当前的修改,而UpdateBatch是把已经确认但是没有存盘的数据写入数据库如果不是使用批量更新的方式的时候,Post的时候,确认的修改直接写入数据库. 我弄了一个例子是ado的.往数据 ...

  10. java 类型转型