HTML5特性之谷歌浏览器桌面消息(window.Notification)推送:

Web前端 来源:leoying 89℃ 0评论

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);

关闭

IT问道推荐

银行贷款频频被拒?
“Dr信用牛牛”让你远离信用污点 国内首家信用健康管理平台免费为你提供信用修复方案