HTML5特性之谷歌浏览器桌面消息(window.Notification)推送:
用法:
(1)消息推送会默认关闭-主要通过window.Notification.permission来判断
"denied" --- 为用户点击了禁用(拒绝打开推送功能)
"default" ----推送功能默认关闭
"granted" ----推送功能为开启状态(用户点击允许后的状态)
在浏览器载入的时候可以选择判断状态
```
if(window.Notification.permission=="default"){
//如果没有开启,something
}
```
(2)让用户选择是否同意开启推送的API是window.Notification.requestPermission(callback);
requestPermission是一个函数,内部需要一个回调函数,用户一旦做出选择,则会触发该回调
```
window.Notification.requestPermission(function(stauts){
//用户如果做出选择会触发回调
//stauts 这个值就能判断出用户到底是做了哪种选择(返回的是一个字符串状态,参考第一条);
});
```
(3)如果开启后则可以创建消息推送实例了,通过new关键字来创建 new Notification(title,option)
这里面有两个参数,第一个是标题指定字符串即可
第二个是配置选项option = {body:内容,icon:图标}//后面还有其他的可选项
option对象里面的body是展示消息的内容,icon是用来放推送消息的图标的(可指定icon图片路径均可);
(4)创建推送消息之后还会返回有默认的事件:onclick,onshow,onclose
var notify = Notification(title,option);
通过notify来指定:
notify.onclick = function(){}
notify.onshow = function(){} //一般会给个setTimeOut让它关闭掉
notify.onclose = function(){}
注意:1.目前该特性仅支持版本比较新的火狐或者谷歌浏览器
2.之前偏旧一点的浏览器可能是使用(window.webkitNotification)对象来判断和实例化推送功能,
但是在现在新版本中均使用(window.Notification)对象,不再支持webkitNotification。
3.本地只能测试是否开启本地提示选项,无法实现消息推送测试,需要真的实现消息推送需要将程序
部署到服务端
4.当你选择开启或者关闭后,页面刷新后即使告诉浏览器再次选择,此时是无效的,
选择一次后会默认储存当前选择,下次打开浏览器的时候将不会再次提示你。
贴代码示例:
(function(window){
var index = 0;
var permission = "default";
var sjNotify = function(title,content,icon){
var Notification = window.Notification || window.mozNotification || window.webkitNotification;
if (!Notification) {
alert("您的浏览器不支持此特性");
return false;
}
if(Notification && permission==="default" && index===0){
//支持,但是未开启桌面提醒,进行相关操作、或提示开启
window.Notification.requestPermission(function(status){
permission = status;
index++;
});
}
else
{
var options = {
body: content,
icon: icon || "./static/sj/img/notify.ico"
};
if (permission === "granted"){
//支持并且开启桌面消息提醒
var instance = new Notification(title, options);
instance.onclick = function() {
instance.close();
};
instance.onerror = function() {
};
instance.onshow = function() {
setTimeout(function () {
instance.close();
},3000)
console.log(instance.body)
};
instance.onclose = function() {
};
}
else if (permission == "denied")
{
//支持但是未开启
return false;
}
else
{
//用户已经忽略选择
return false;
}
}
}
window.sjNotify = sjNotify;
})(this);