【发布时间】:2015-08-08 08:04:12
【问题描述】:
我正在尝试为我的应用程序实现桌面通知。如果发送一个通知,它可以正常工作,但是当同时发送多个通知时,firefox 不会显示其中任何一个。 Chrome 不存在此问题。
这是 Firefox 无法实现的吗?我的印象是通知选项中标签的使用是用于堆叠通知。
代码:
function isNewNotificationSupported() {
if (!window.Notification || !Notification.requestPermission) return false;
if (Notification.permission == "granted") throw new Error("");
try {
new Notification("");
} catch (e) {
if (e.name == "TypeError") return false;
}
return true;
}
function notifyMe(aa, bb, cc, dd) {
if (!("Notification" in window)) {
//alert("This browser does not support desktop notification");
} else if (Notification.permission === "granted") {
if (!document.hasFocus() || cc == 1) {
var options = {
body: bb,
icon: "",
dir: "ltr",
tag: dd
};
var notification = new Notification(aa, options);
notification.onshow = function() {
setTimeout(notification.close.bind(notification), 15000);
};
}
} else if (Notification.permission !== "denied") {
if (isNewNotificationSupported()) {
Notification.requestPermission(function(permission) {
if (!("permission" in Notification)) {
Notification.permission = permission;
}
if (permission === "granted") {
var options = {
body: bb,
icon: "",
dir: "ltr",
tag: dd
};
var notification = new Notification(aa, options);
notification.onshow = function() {
setTimeout(notification.close.bind(notification), 15000);
};
}
});
}
}
}
notifyMe("New notification1","newtest","1","test1");
notifyMe("New notification2","newtest2","1","test2");
我为它创建了一个 jsfiddle:
更新:我想我现在通过将其中一个 notifyMe 更改为:
setTimeout(function() { notifyMe("Newnotification1","newtest","1","test1"); }, 200);
Firefox 现在可以正确堆叠它们了。
【问题讨论】:
-
在 OS X 上我看到了两者。显示第一个后不久,文本将更新为第二个。
-
我在 Windows 8.1 上使用 Firefox,但没有显示。如果它对你有用,那么 OS X 上的 firefox 似乎工作方式不同,但在你的情况下(从我从你的评论中读到的)它仍然没有像在 Chrome 上那样堆叠它们。
-
确实如此,但我认为 OS X 通知中心不会堆叠来自同一个应用程序的多个通知。我相信它只会按顺序显示它们,尽管它们会在通知中心的列表中。一次只显示一个可能会更好。
-
由于
notification.onshow = function () { setTimeout(notification.close.bind(notification), 15000); }创建闭包并且闭包始终保持变量的最新值(简而言之),这正在发生(在这种情况下是用于第二次通知的变量)。在这里尝试取消关闭,应该可以的。 -
我专门为 chrome 添加了该部分,因为 Firefox 已经自行关闭通知。但是,即使我完全删除了关闭块,它仍然无法在 firefox (windows 8.1) 上运行。然而,它似乎是一个 firefox.windows 组合,因为我问过 linux/firefox 的人看到了这两个通知。
标签: javascript jquery