(function(window){ /** * @brief Notifier * * @param type 1. 一直提示 2,更新提示内容 3, 控制显示上限。超过个数删除最早的 4,超时更新 * @param param 本参数在type为3,4时才有效, type为3表示可以最多显示通知的个数 4, 表示多少秒后删除了 * * @return */ function Notifier() {}; window.Notifier = Notifier; type = 1; queue = []; t = 5; c = 3; _notifier = undefined ; if(undefined !== window.webkitNotifications) { _notifier = window.webkitNotifications; }else if (undefined !== window.Notification) { _notifier = window.Notification; } else { // console.log('error not found notification!') } window.Notifier.ModelAll = function() { type = 1; } window.Notifier.ModelUpdate = function() { type = 2; } window.Notifier.ModelCount = function(ct) { if(ct !== undefined) c = ct; type = 3; } window.Notifier.ModelTimeout = function(timeout) { if(timeout !== undefined) t = timeout; type = 4; } window.Notifier.HasSupport = function() { if(undefined === _notifier) { return false; } return true; } window.Notifier.GetPermission = function() { return _notifier.checkPermission(); } window.Notifier.IsGetPermission = function() { return (_notifier === 0); } window.Notifier.Disable = function() { return (_notifier.checkPermission === 2); } window.Notifier.RequestPermission = function(cb) { _notifier.requestPermission(function() { if(cb) {cb(_notifier.checkPermission() == 0)} }); } //type = 1;关闭上一个 window.Notifier.Close = function(type) { if(type = 1) { tmp = queue.pop(); } else { tmp = queue.shift(); } _closeItem(tmp); } window.Notifier.ClosePre = function () { tmp = queue.pop(); _closeItem(tmp); } window.Notifier.CloseLast = function () { tmp = queue.shift(); _closeItem(tmp); } window.Notifier.CloseAll = function() { while(queue.length > 0) { var tmp = queue.shift(); _closeItem(tmp); } } window.Notifier.Notify = function(icon, title, body) { if (this.IsGetPermission() == 0) { var popup = _createNotificationAndShow(icon, title, body); if(undefined == popup) { return false; } switch(type) { case 2: if(queue.length > 0) { tmp = queue.pop(); _closeItem(tmp); } break; case 3: while(queue.length >= c) { tmp = queue.shift(); _closeItem(tmp); } break; case 4: setTimeout(function(){_closeItem(popup);}, t*1000); break; } var q = queue; popup.onclose = function(){ var cur = q.indexOf(popup); if(cur >= 0) { q.splice(cur, 1); } }; popup.onclick = function(){}; queue.push(popup); return true; } else { RequestPermission(); } return false; } function _createNotificationAndShow(icon, title, body) { if(undefined != window.webkitNotifications && _notifier.name === window.webkitNotifications.name) { var n = _notifier.createNotification(icon, title, body); n.show(); return n; }else if (undefined !== window.Notification && _notifier.name === window.Notification.name) { return new _notifier(title, {icon:icon, body: body}); } else { // console.log('error not found notification!') // alert(title +"\n\n"+body); return undefined; } } function _closeItem(n) { if(undefined == n) { return } if(n.cancel) { n.cancel(); } else { n.close(); } } })(window);