编程技巧│浏览器 Notification 桌面推送通知
一、什么是 Notification
Notification是浏览器最小化后在桌面显示消息的一种方法- 类似于 
360等流氓软件在桌面右下角的弹窗广告 - 它与浏览器是脱离的,消息是置顶的
 
二、弹窗授权
- 授权当前页面允许通知
 - 可以通过检查只读属性 
Notification.permission的值来查看你是否已经有权限 - default: 用户还未被询问是否授权,可以通过 
Notification.requestPermission()可以询问用户是否允许通知 - granted: 用户点击允许后的状态
 - denied: 用户点击拒绝后的状态,通知框不可用
 
Notification.requestPermission()
三、弹窗使用
- 可以通过 
new Notification($title, $options)使用通知推送功能 - title: 一定会被显示的通知标题
 - options: 可选,一个被允许用来设置通知的对象。它包含以下属性:
 - dir: 文字的方向;它的值可以是 auto(自动), ltr(从左到右), or rtl(从右到左)
 - lang: 指定通知中所使用的语言。
 - body: 通知中额外显示的字符串
 - tag: 赋予通知一个ID,以便在必要的时候对通知进行刷新、替换或移除。
 - icon: 一个图片的URL,将被用于显示通知的图标。
 
new Notification("温馨提醒", {
	body: "飞兔小哥送你一份奖品待领取",
	icon: "https://autofelix.github.io/autofelix/u/favicon.ico",
	data: "https://autofelix.blog.csdn.net/"
});
四、浏览器支持检测
- 使用通知推送功能前,需要先检查浏览器是否支持
 - 可以通过 
"Notification" in window方法去检测 - 在浏览器支持的前提下,判断用户是否授权允许通知,如果还未授权,可以弹出授权框
 - 如果用户已经拒绝过,我们就不去打扰用户了
 
function notify() {
    // 先检查浏览器是否支持
    if (!("Notification" in window)) {
        alert("This browser does not support desktop notification");
    }
    // 检查用户是否同意接受通知
    else if (Notification.permission === "granted") {
        // If it's okay let's create a notification
        var notification = new Notification("Hi there!");
    }
    // 否则我们需要向用户获取权限
    else if (Notification.permission !== "denied") {
        Notification.requestPermission().then(function (permission) {
            // 如果用户接受权限,我们就可以发起一条消息
            if (permission === "granted") {
                var notification = new Notification("Hi there!");
            }
        });
    }
    // 最后,如果执行到这里,说明用户已经拒绝对相关通知进行授权
    // 出于尊重,我们不应该再打扰他们了
}
五、授权回调
- 该通知有四个回调方法
 - onshow: 在通知展示的时候调用
 - onclose: 在通知关闭的时候调用
 - onclick: 在通知点击的时候调用
 - onerror: 在通知出错的时候调用
 
var notification = new Notification("温馨提醒", {
    body: "飞兔小哥送你一份奖品待领取",
    icon: "https://autofelix.github.io/autofelix/u/favicon.ico",
    data: "https://autofelix.blog.csdn.net/"
});
notification.onshow = function (event) {
    console.log("show : ", event);
};
notification.onclose = function (event) {
    console.log("close : ", event);
};
notification.onclick = function (event) {
    console.log("click : ", event);
    // 当点击事件触发,打开指定的url
    window.open(event.target.data)
    notification.close();
};
notification.onerror = function (event) {
    console.log("close : ", event);
};
六、3秒后关闭弹窗
- 实现3秒后关闭弹窗的功能
 
var notification = new Notification('标题');
notification.onshow = function () {
    setTimeout(function () {
        notification.close();
    }, 3000);
}
												
											编程技巧│浏览器 Notification 桌面推送通知的更多相关文章
- 与众不同 windows phone (10) - Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息
		
原文:与众不同 windows phone (10) - Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息 [索引页][源码下载] 与众不同 windows ph ...
 - 与众不同 windows phone (9) - Push Notification(推送通知)之概述, 推送 Toast 通知
		
原文:与众不同 windows phone (9) - Push Notification(推送通知)之概述, 推送 Toast 通知 [索引页][源码下载] 与众不同 windows phone ( ...
 - Windows Azure Service Bus Notification Hub推送通知
		
前言 随着Windows Azure 在中国的正式落地,相信越来越多的人会体验到Windows Azure带来的强大和便利.在上一篇文章中, 我们介绍了如何利用Windows Azure中的Servi ...
 - HTML5 Web Notifications 桌面推送小记
		
目录 简介 常用API 手动设置权限 简介 Web Notifications目前在w3c的协议中已经是"推荐"(REC:Recommendation)阶段,除了iE外,各大现代浏 ...
 - 重新想象 Windows 8 Store Apps (67) - 后台任务: 推送通知
		
[源码下载] 重新想象 Windows 8 Store Apps (67) - 后台任务: 推送通知 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 后台任务 推送通 ...
 - 背水一战 Windows 10 (121) - 后台任务: 推送通知
		
[源码下载] 背水一战 Windows 10 (121) - 后台任务: 推送通知 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 推送通知 示例演示如何接收推送通知/WebA ...
 - 苹果推送通知服务APNs编程(转)
		
add by zhj: 下面的几篇文章也非常好, http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios- ...
 - (转)苹果推送通知服务教程 Apple Push Notification Services Tutorial
		
本文译自http://www.raywenderlich.com/.原文由iOS教程团队 Matthijs Hollemans 撰写,经原网站管理员授权本博翻译. 在iOS系统,考虑到手机电池电量,应 ...
 - iOS上简单推送通知(Push Notification)的实现
		
iOS上简单推送通知(Push Notification)的实现 根据这篇很好的教程(http://www.raywenderlich.com/3443/apple-push-notification ...
 
随机推荐
- Installing github.com/mdempsky/gocode FAILED  ----vscode安装go插件中的一些坑
			
问题前景: 最近在使用vscode,编写一些go的代码,但发现调试的时候,会需要安装很多插件,但通过vscode之间安装的话,会出现如下的错误: Installing github.com/mdemp ...
 - Docker的简介
			
前言 Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源. 何为Docker? ...
 - spring-Bean依赖注入-》普通数据类型
			
1.创建UserDao接口以及UserDaoImpl实现类(接口代码省略) public class UserDaoImpl implements UserDao { private String u ...
 - 还原lvm逻辑卷创建整个过程
			
很多情况入职的时候,系统可能已规划过的,但是有的信息也不是很完整,比如下面的lvm逻辑卷我们先不管对与错,利用一些工具来了解当前lvm逻辑卷的情况 系统采样: [root@fp-web-112 var ...
 - 巧用 JuiceFS Sync 命令跨云迁移和同步数据
			
近年来,云计算已成为主流,企业从自身利益出发,或是不愿意被单一云服务商锁定,或是业务和数据冗余,或是出于成本优化考虑,会尝试将部分或者全部业务从线下机房迁移到云或者从一个云平台迁移到另一个云平台,业务 ...
 - python基础练习题(题目 阶乘求和)
			
day17 --------------------------------------------------------------- 实例025: 阶乘求和 题目 求1+2!+3!+-+20!的 ...
 - ICO图标在线生成转换网站
			
ico是Icon file的缩写,是Windows的图标文件格式的一种,可以存储单个图案.多尺寸.多色板的图标文件. 在Windows操作系统中,单个图标的文件名后缀是.ICO.这种格式的图标可以在W ...
 - 转载:Linux图形界面知识(介绍X、X11、GNOME、Xorg、KDE等之间的关系)
			
转载 http://blog.csdn.net/zhangxinrun/article/details/7332049Linux初学者经常分不清楚linux和X之间,X和Xfree86之间,X和KDE ...
 - zookeeper篇-初识zookeeper
			
点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. 什么是zookeeper? 中间件 作用于分布式系统 支持java.c语 ...
 - 攻防世界-MISC:2017_Dating_in_Singapore
			
这是MISC高手进阶区的题目:题目如下: 点击下载附件一,得到一张pdf图片,除此之外就只有题目给的字符串了,不知道是什么意思(查看了一下WP)原来每一串通过"-"隔开的字符串代表 ...