【问题标题】:Firefox is not showing desktop notifications if more than one is sent at the same time如果同时发送多个通知,Firefox 不会显示桌面通知
【发布时间】: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:

http://jsfiddle.net/1bm0wyvf/

更新:我想我现在通过将其中一个 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


【解决方案1】:

我正在使用以下函数,它在 Firefox/Linux 上表现得非常好。

function notif(message){

 if (Notification.permission !== 'denied') {
    Notification.requestPermission(function (permission) {
      if (!('permission' in Notification)) {
        Notification.permission = permission
      }
      if (permission === "granted") {
          let notification = new Notification(message)
      }
    })
  }
}
notif("Hello world!!")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多