用于浏览器桌面通知的Web API 接口 -notification
notification 接口用于浏览器向用户提供通知内容;常见的如网页版的微信:

1、实现,需要Notifications API 提供的通知接口:
用法:
let notification = new Notification(title, options)
title参数:用于通知的主题;
options参数:是一个对象;用于配置被通知对象 notification 的属性;
var options={
dir://auto自动;ltr 从左到右;rtl 从右到左;
lang://指定通知使用的语言;
body://通知中额外显示的字符串;
icon://图片的URL,用于通知的图标;
}
var options = {
body: 'this is a beautiful world',
dir: 'rtl'
}
var notify1 = new Notification('hello world',options);
console.log(options.body==notify1.body)//true;
console.log(options.dir==notify1.dir)//true;
//options对象的属性都是绑定到 Notifiaction 的实例对象属性上的。
仅仅是构造一个Notification 对象的实例还不够;
2、获取通知权限 Notification.permission:
granted: //用户已经明确的授予了显示通知的权限。.
denied: //用户已经明确的拒绝了显示通知的权限。
default: //用户还未被询问是否授权; 这种情况下权限将视为 denied.
3、请求用户权限:
Notification.requestPermission()
requestPermission()方法接受一个回调函数;这个回调函数接受一个参数;即requestPermission()返回的 状态;permission
4、完整的通知权限请求:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div>
<button onclick="notify()">点我查看</button>
</div>
<script>
//先检查浏览器是否支持
function notify(){
if (!('Notification' in window)) {
alert('你的浏览器不支持Notification')
}
//检查是否拥有通知权限;有就通知,没有请求;
else if (Notification.permission=='granted') {
var options={
icon:'http://www.itechat.cn/ya8526/html/images/img10.jpg',
body:'such a beautiful wolrld!'
}
var notification=new Notification('hello wolrld!',options);
}else if (Notification.permission !== 'denied'){
Notification.requestPermission(
function(permission){
if (permission=='granted'){
var notification=new Notification('hello wolrld!');
}
}
);
}
}
</script>
</body>
</html>
需要注意的是;第一次需要申请权限;用户授权之后就能正常显示通知内容;用户如果忽视请求,再次点击会再次请求;用户选择拒绝,则浏览器会忽视,代码终止。
再次注意的是 ;Notification.requestPermission(callback)这种回调写法已经被弃用;取而代之的是基于promise的语法;其中js部分
//先检查浏览器是否支持
function notify(){
if (!('Notification' in window)) {
alert('你的浏览器不支持Notification')
}
//检查是否拥有通知权限;有就通知,没有请求;
else if (Notification.permission=='granted') {
var options={
icon:'http://www.itechat.cn/ya8526/html/images/img10.jpg',
body:'such a beautiful wolrld!'
}
var notification=new Notification('hello wolrld!',options); }else if (Notification.permission !== 'denied'){
Notification.requestPermission().then(function(result){
if(result=='granted'){
var notification=new Notification('hello wolrld!',options);
}
})
} }
谷歌浏览器对于这种写法没有响应,火狐正常; 原因是http站点的安全性问题,需要将站点升级到HTTPS。

将站点升级到https站点后,测试谷歌浏览器正常,测试地址
MDN上有更多的实例属性和事件处理;参考链接
用于浏览器桌面通知的Web API 接口 -notification的更多相关文章
- Winform混合式开发框架访问Web API接口的处理
在我的混合式开发框架里面,集成了WebAPI的访问,这种访问方式不仅可以实现简便的数据交换,而且可以在多种平台上进行接入,如Winform程序.Web网站.移动端APP等多种接入方式,Web API的 ...
- 浏览器桌面通知--Notification
前言 最近项目上要用到浏览器桌面通知,之前虽然知道有这个东西,但是一直没有用过,借此机会了解下桌面通知的机制,在此分享下. 1.权限 首先需要明确的是,不是所有网页都可以发桌面通知的,不然不得烦死,那 ...
- Http下的各种操作类.WebApi系列~通过HttpClient来调用Web Api接口
1.WebApi系列~通过HttpClient来调用Web Api接口 http://www.cnblogs.com/lori/p/4045413.html HttpClient使用详解(java版本 ...
- 浏览器桌面通知Notification实践
一言不合就上图: 最近常常在浏览器看到这样的消息推送,还有QQ.com的推送,现在我对这个不了解,不知道叫消息自动推送对不对,这个时chrome浏览器的截图,出现在右下角,其他浏览器的样式可能有些微差 ...
- 浏览器桌面通知Notification探究
首先说明,这篇博文不是科普讲解的,而是立flag研究的,是关于浏览器消息自动推送,就是下面这个玩意: 最近常常在浏览器看到这样的消息推送,还有QQ.com的推送,现在我对这个不了解,不知道叫消息自动推 ...
- Web API接口设计经验总结
在Web API接口的开发过程中,我们可能会碰到各种各样的问题,我在前面两篇随笔<Web API应用架构在Winform混合框架中的应用(1)>.<Web API应用架构在Winfo ...
- Web API接口 安全验证
在上篇随笔<Web API应用架构设计分析(1)>,我对Web API的各种应用架构进行了概括性的分析和设计,Web API 是一种应用接口框架,它能够构建HTTP服务以支撑更广泛的客户端 ...
- 浏览器桌面通知(notifications)
近期在做公司后台管理系统,当有任务到来时,须要通知当事人,可是 当事人有可能在做别的,浏览器有可能会被最小化,这样就非常难看到通知了.经过查找发现有些浏览器能够使用noitfications.能够在桌 ...
- Asp.Net Web Api 接口
如何让你的 Asp.Net Web Api 接口,拥抱支持跨域访问. 由于 web api 项目通常是被做成了一个独立站点,来提供数据,在做web api 项目的时候,不免前端会遇到跨域访问接口的 ...
随机推荐
- MySQL 单实例编译安装 以及多实例安装简介
这是基本的安装教程,与牛逼的大神无关,或许是牛逼大神不用看就会安装吧. CentOS 6.5 Final x86_64 一.预安装软件包 1.开发包组合安装 yum groupinstall &qu ...
- mybatis的知识点
mybatis核心配置文件的配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE conf ...
- Travis CI实现持续部署
安装Ruby 2.0以上版本并安装travis的命令行工具 可以看出我的已经是安装好的(Ubuntu 16.04.3 LTS 系统) ruby -v ruby --) [x86_64-linux-gn ...
- C++\virtual 虚函数、纯虚函数
前提摘要: 虚函数联系到多态,多态联系到继承.所以本文中都是在继承层次上做文章.没了继承,什么都没得谈. 虚函数定义: 指向基类的指针或引用在操作它的多态类(子类/派生类)对象时,会根据不同的类对象, ...
- php的二维数组排序
//建立一个$arr的二维数组 $arr=array( array('name'=>'e','age'=>5), array('name'=>'b','age'=>2), ar ...
- 【ASP.NET 系列】浅谈缓存技术在ASP.NET中的运用
本篇文章虽不谈架构,但是Cache又是架构中不可或缺的部分,因此,在讲解Cache的同时,将会提及到部分架构知识,关于架构部分,读者可以不用理解,或者直接跳过涉及架构部分的内容 你只需关心Cache即 ...
- 老版VC++线程池
在一般的设计中,当需要一个线程时,就创建一个,但是当线程过多时可能会影响系统的整体效率,这个性能的下降主要体现在:当线程过多时在线程间来回切换需要花费时间,而频繁的创建和销毁线程也需要花费额外的机器指 ...
- Lua和C的语法差别
没有main函数 Lua是脚本语言,没有固定入口的main函数.当lua解析器解析某个lua代码文件时,lua解析器一样一行的解析lua脚本. print("Hello lua") ...
- 解决html文件的DropFileName = "svchost.exe"木马
首先表示强烈谴责,没事写出这种木马来.导致开发者把时间花在解决这种问题上. 这种木马会在你全盘的html文件的最底部生成一堆vbscript代码,导致html文件变得很大.大概213kb.可以看出他就 ...
- Codeforces #448 Div2 E
#448 Div2 E 题意 给出一个数组,有两种类型操作: 选定不相交的两个区间,分别随机挑选一个数,交换位置. 查询区间和的期望. 分析 线段树区间更新区间求和. 既然是涉及到两个区间,那么对于第 ...