html5桌面通知(Web Notifications)实例解析


Posted in HTML / CSS onJuly 07, 2014

html5桌面通知(Web Notifications)对于需要实现在新消息入线时,有桌面通知效果的情况下非常有用,在此简单介绍一下这个html5的新属性。

这里有个不错的demo:html5 web notification demo

从上面这个demo中 我们就可以获取所需要的基本核心代码,如下:

复制代码
代码如下:
<script>
var Notification = window.Notification || window.mozNotification || window.webkitNotification;

Notification.requestPermission(function (permission) {
// console.log(permission);
});

function show() {
var instance = new Notification(
"test title", {
body: " test message"
}
);

instance.onclick = function () {
// Something to do
};
instance.onerror = function () {
// Something to do
};
instance.onshow = function () {
// Something to do
};
instance.onclose = function () {
// Something to do
};

return false;
}
</script>


 
其中:Notification.requestPermission 这句代码的功能就是向用户请求权限允许

通过以上的例子,基本思路我们已经有了,首先加载文档时,就向用户请求权限,获取权限后以后都so easy了。

复制代码
代码如下:
window.addEventListener('load', function () {
// At first, let's check if we have permission for notification
if (Notification && Notification.permission !== "granted") {
Notification.requestPermission(function (status) {
if (Notification.permission !== status) {
Notification.permission = status;
}
});
}
});

火狐下 验证是通过的,但是在chrome下总是出不来,后来发现这样一段话

复制代码
代码如下:
Not a Bug, Feature.

Desktop Notifications can only be triggered via a user action. Typing into the
JavaScript console has the same effect as raw javascript code embedded into the web
page (no user action). Typing the javascript into the location bar, however,
represents a user-action (the user is intentionally visiting a javascript link to
enable notifications, probably for sites that tend to use href="javascript:" instead
of onclick="".

I'm pretty sure this is a non-issue.

原来在chrome下是必须要用户手动触发的,否则,chrome浏览器会无视这段的js

但是在我们网站里肯定不可能加一个按钮或者超链接来显式的让用户授权吧,好吧, 实际上这也不是个事情,我们可以在用户经常点的按钮上顺便处理下这个授权就好,在chrome下是一次授权终身有用。除非你进入设置把他禁了。

整合一下,代码如下:

复制代码
代码如下:
function showMsgNotification(title, msg){
var Notification = window.Notification || window.mozNotification || window.webkitNotification;

if (Notification && Notification.permission === "granted") {
var instance = new Notification(
title, {
body: msg,
icon: "image_url"
}
);

instance.onclick = function () {
// Something to do
};
instance.onerror = function () {
// Something to do
};
instance.onshow = function () {
// Something to do
// console.log(instance.close);
setTimeout(instance.close, 3000);
};
instance.onclose = function () {
// Something to do
};
}else if (Notification && Notification.permission !== "denied") {
Notification.requestPermission(function (status) {
if (Notification.permission !== status) {
Notification.permission = status;
}
// If the user said okay
if (status === "granted") {
var instance = new Notification(
title, {
body: msg,
icon: "image_url"
}
);

instance.onclick = function () {
// Something to do
};
instance.onerror = function () {
// Something to do
};
instance.onshow = function () {
// Something to do
setTimeout(instance.close, 3000);
};
instance.onclose = function () {
// Something to do
};

}else {
return false
}
});
}else{
return false;
}

}

HTML / CSS 相关文章推荐
纯DOM+CSS3实现简单的小风车动画
Sep 27 HTML / CSS
一款纯css3实现的鼠标悬停动画按钮
Dec 29 HTML / CSS
CSS3实现大小不一的粒子旋转加载动画
Apr 21 HTML / CSS
CSS3实现复选框动画特效示例代码
Sep 27 HTML / CSS
HTML5 canvas画图并保存成图片的jcanvas插件
Jan 17 HTML / CSS
html5设计原理(推荐收藏)
May 17 HTML / CSS
谈一谈HTML5本地存储技术
Mar 02 HTML / CSS
详解canvas绘图时遇到的跨域问题
Mar 22 HTML / CSS
HTML5实现自带进度条和滑块滑杆效果
Apr 17 HTML / CSS
HTML5基于flash实现播放RTMP协议视频的示例代码
Dec 04 HTML / CSS
html2 canvas svg不能识别的解决方案
Jun 03 HTML / CSS
CSS巧用渐变实现高级感背景光动画
Dec 06 HTML / CSS
HTML5实现WebSocket协议原理浅析
Jul 07 #HTML / CSS
HTML5新增的表单元素和属性实例解析
Jul 07 #HTML / CSS
HTML5+CSS3实现拖放(Drag and Drop)示例
Jul 07 #HTML / CSS
html5的自定义data-*属性与jquery的data()方法的使用
Jul 02 #HTML / CSS
Html5新特性用canvas标签画多条直线附效果截图
Jun 30 #HTML / CSS
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
Jun 23 #HTML / CSS
HTML5在canvas中绘制复杂形状附效果截图
Jun 23 #HTML / CSS
You might like
配置最新的PHP加MYSQL服务器
2006/10/09 PHP
PHP 编程请选择正确的文本编辑软件
2006/12/21 PHP
php获取操作系统语言代码
2013/11/04 PHP
php cli配置文件问题分析
2015/10/15 PHP
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
js获取当前日期时间及其它操作汇总
2015/04/17 Javascript
js完美解决IE6不支持position:fixed的bug
2015/04/24 Javascript
JS实现简单抖动效果
2017/06/01 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
官方推荐react-navigation的具体使用详解
2018/05/08 Javascript
Angular使用动态加载组件方法实现Dialog的示例
2018/05/11 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
深入学习Vue nextTick的用法及原理
2019/10/08 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
2020/10/29 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
[00:37]2016完美“圣”典风云人物:rOtk宣传片
2016/12/09 DOTA
Python中你应该知道的一些内置函数
2017/03/31 Python
python实现kNN算法识别手写体数字的示例代码
2019/08/16 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
财务分析个人的自荐书范文
2013/11/24 职场文书
银行财务部实习生的自我鉴定
2013/11/27 职场文书
小学生家长评语集锦
2014/01/30 职场文书
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
2014院党委领导班子对照检查材料思想汇报
2014/09/24 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
安全先进个人材料
2014/12/29 职场文书
男方婚前保证书
2015/02/28 职场文书
幼儿园小朋友毕业感言
2015/07/30 职场文书
redis限流的实际应用
2021/04/24 Redis
Django集成富文本编辑器summernote的实现步骤
2021/05/31 Python
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android
Python OpenCV超详细讲解读取图像视频和网络摄像头
2022/04/02 Python