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教程(6):创建网站多列
Apr 02 HTML / CSS
CSS3制作日历实现代码
Jan 21 HTML / CSS
一款CSS3实现多功能下拉菜单(带分享按)的教程
Nov 05 HTML / CSS
纯css3实现照片墙效果
Dec 26 HTML / CSS
CSS3制作苹果风格键盘特效
Feb 26 HTML / CSS
使用CSS3实现input多选框自定义样式的方法示例
Jul 19 HTML / CSS
深入剖析webstorage[html5的本地数据处理]
Jul 11 HTML / CSS
canvas实现俄罗斯方块的方法示例
Dec 13 HTML / CSS
浅谈HTML5 FileReader分布读取文件以及其方法简介
Nov 09 HTML / CSS
htnl5利用svg页面高斯模糊的方法
Jul 20 HTML / CSS
如何在Canvas中添加事件的方法示例
May 21 HTML / CSS
教你做个可爱的css滑动导航条
Jun 15 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
原型方法的不同写法居然会影响调试的解决方法
2007/03/08 Javascript
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
JS基础之undefined与null的区别分析
2011/08/08 Javascript
javascript通过class来获取元素实现代码
2013/02/20 Javascript
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
JavaScript函数详解
2014/11/17 Javascript
JavaScript汉诺塔问题解决方法
2015/04/21 Javascript
基于javascript实现表格的简单操作
2016/05/21 Javascript
JS添加删除DIV的简单实例
2016/07/08 Javascript
JavaScript 数组的深度复制解析
2016/11/02 Javascript
jquery文字填写自动高度的实现方法
2016/11/07 Javascript
利用node实现一个批量重命名文件的函数
2017/12/21 Javascript
JS中call和apply函数用法实例分析
2018/06/20 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
修改vue+webpack run build的路径方法
2018/09/01 Javascript
微信小程序时间控件picker view使用详解
2018/12/28 Javascript
vue-cli3添加模式配置多环境变量的方法
2019/06/05 Javascript
js实现弹窗效果
2020/08/09 Javascript
[01:11:11]Alliance vs RNG 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Python多进程编程技术实例分析
2014/09/16 Python
使用Python编写简单的端口扫描器的实例分享
2015/12/18 Python
Python缩进和冒号详解
2016/06/01 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
python实现交并比IOU教程
2020/04/16 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
canvas实现俄罗斯方块的方法示例
2018/12/13 HTML / CSS
使用HTML5在网页中嵌入音频和视频播放的基本方法
2016/02/22 HTML / CSS
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
思想政治教育专业个人求职信范文
2013/12/20 职场文书
带病坚持工作事迹
2014/05/03 职场文书
公司领导班子民主生活会对照检查材料
2014/10/02 职场文书
给上级领导的感谢信
2015/01/22 职场文书
2015年复活节活动总结
2015/02/27 职场文书
推荐六本经典文学奖书籍:此生必读
2019/08/22 职场文书