我在聊天应用和HTML 5通知中使用了websocket。我在尝试使用HTML 5通知时,如果有来自服务器的消息以及当前页面,标签未处于活动状态或未处于焦点状态时(您还有其他内容,那么' ;不在聊天应用窗口/页面上),所以这里有来自服务器的消息
//set global var
var nnn=false,Notification = window.Notification || window.mozNotification || window.webkitNotification;
//connect to the websocket server
conn = new WebSocket('ws://mysite.com:9090');
//function for handling the message from the server
conn.onmessage = function(e) {
show_n(e.data);
}
//detect if on page/active/focus or not on page/out focus
$(window).on("blur focus", function(e) {
var prevType = $(this).data("prevType");
if (prevType != e.type) { // reduce double fire issues
switch (e.type) {
case "blur":
nnn=true;
break;
case "focus":
console.log("false");
nnn=false;
break;
}
}
$(this).data("prevType", e.type);
});
//HTML 5 notification
Notification.requestPermission();
function show_n(message) {
console.log(nnn);
if(nnn===true){
Notification.requestPermission(function(perm){
if(perm==="granted"){
var instance = new Notification(
"New Message", {
body: message
});
}else{
Notification.requestPermission();
}
});
}
}
现在,问题在于' nnn'变量在我切换标签页面或页面上总是如此,所以即使我在页面上我不想要的时候也会显示通知,据说如果我不在页面上(转到其他标签页面) ,或在浏览器的另一端做其他事情)或页面没有焦点/不活动,' nnn'变量应该设置为true,否则如果我在页面上(活动/焦点上),那么' nnn'应该设置为false。但是,如果我不显示HTML 5通知(不触发HTML 5通知事件)并记录模糊和焦点事件,则会显示“真实”#39;或者' false'哪个是对的。请提出任何想法,线索,建议,帮助和建议吗?