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 相关文章推荐
CSS3制作半透明边框(Facebox)类似渐变
Dec 09 HTML / CSS
canvas基础之图形验证码的示例
Jan 02 HTML / CSS
HTML5之HTML元素扩展(下)—增强的Form表单元素值得关注
Jan 31 HTML / CSS
详解HTML5中ol标签的用法
Sep 08 HTML / CSS
HTML5之tabindex属性全面解析
Jul 07 HTML / CSS
详解使用双缓存解决Canvas clearRect引起的闪屏问题
Apr 29 HTML / CSS
HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题
May 28 HTML / CSS
用CSS3画一个爱心
Apr 27 HTML / CSS
CSS巧用渐变实现高级感背景光动画
Dec 06 HTML / CSS
在CSS中使用when/else的方法
Jan 18 HTML / CSS
CSS中实现动画效果-附案例
Feb 28 HTML / CSS
六个好看实用的 HTML + CSS 后台登录入口页面
Apr 28 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中的正规表达式(一)
2006/10/09 PHP
一个经典的PHP文件上传类分享
2014/11/18 PHP
php实现简单文件下载的方法
2015/01/30 PHP
javascript 正则表达式相关应介绍
2012/11/27 Javascript
JS批量操作CSS属性详细解析
2013/12/16 Javascript
jQuery+jRange实现滑动选取数值范围特效
2015/03/14 Javascript
轻松实现jquery手风琴效果
2016/01/14 Javascript
js调用webservice构造SOAP进行身份验证
2016/04/27 Javascript
BootStrap中Tab页签切换实例代码
2016/05/30 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
vue2.0构建单页应用最佳实战
2017/04/01 Javascript
浅谈angular2 组件的生命周期钩子
2017/08/12 Javascript
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
angularjs自定义过滤器demo示例
2019/08/24 Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
2020/02/17 Javascript
Vue实现点击箭头上下移动效果
2020/06/11 Javascript
python 控制语句
2011/11/03 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
python中cPickle类使用方法详解
2018/08/27 Python
python交换两个变量的值方法
2019/01/12 Python
python利用Opencv实现人脸识别功能
2019/04/25 Python
使用pytorch和torchtext进行文本分类的实例
2020/01/08 Python
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
美国一家著名的儿童鞋制造商:Stride Rite
2017/01/02 全球购物
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
传播学毕业生求职信
2013/10/11 职场文书
小学毕业家长寄语
2014/01/19 职场文书
大学生期末自我鉴定
2014/02/01 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
二年级语文上册复习计划
2015/01/19 职场文书
五一劳动节活动总结
2015/02/09 职场文书
行政助理岗位职责范本
2015/04/11 职场文书
Python文件的操作示例的详细讲解
2021/04/08 Python
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS
【海涛dota】偶遇拉娜娅 质量局德鲁伊第一视角解说
2022/04/01 DOTA
CentOS下安装Jenkins的完整步骤
2022/04/07 Servers