Chrome扩展开发中的桌面通知管理

javascript April 08 2014


第一次在扩展中使用桌面通知功能,默认使用的webkit API接口,实现很简单:

var notification; function showNotification(content){ notification = webkitNotifications.createNotification('','提醒',content); notification.show(); setTimeout("notification.close()",5000);}

本来相安无事,但如果在5秒之内连续发出多个通知呢?毕竟notification对象只有一个,每调用一次showNotification方法,该变量就会指向最新创建的通知对象,也就是说,只有最后一个窗口才会“如约”在5秒后自动关闭。为了解决这个问题,搜索网络终不得结果,最后想到用一个数组来存放多个通知对象,思路如下:

1.假如有N个通知对象,按先后顺便,存放在一个数组里。

2.第一个通知显示5秒后,从数组中取出该对象,调用关闭方法并从数组中移除,第二个、第三个、第N个依此类推。

var notifications = new Array(); function showNotification(content){ notification = webkitNotifications.createNotification('','提醒',content); notification.show(); notifications.push(notification); var index = notifications.length - 1; setTimeout("notifications["+index+"].close();notifications.splice("+index+",1)",5000);}

这样看着似乎可行,但实际上有问题,每个通知对象从数组中被删除时,需要依靠下标来定位,然而当一个对象被删除后,数组中的其余对象的下标也就发生了变化,也就是导致对象定位不准的问题。于是决定弃用数组,最终采用了JSON对象:

var notifications = {};//通知容器function showNotification(content){ notification = webkitNotifications.createNotification("","提醒",content); notification.show(); var k = "_" + new Date().getTime() + Math.random();//生成随机key notifications[k] = notification; setTimeout("notifications['" + k + "'].close();delete notifications['" + k + "']",5000);} 感觉很不错,采用JSON格式的优势就在于,不用考虑下标的问题,只需用一个随机字符串作为key与对象一同保存到json对象容器中,理论上可以容纳任意多个通知对象,并且可以有条不紊地依次删除。

原文链接:http://ichatter.cn/chrome-e6-89-a9-e5-b1-95-e5-bc-80-e5-8f-91-e4-b8-ad-e7-9a-84-e6-a1-8c-e9-9d-a2-e9-80-9a-e7-9f-a5-e7-ae-a1-e7-90-86.html


欢迎来到阿J小虫的博客

Follow @ichatter on GitHub

最新评论

推荐内容