如何在浏览器创建的桌面通知上正确设置关闭超时

时间:2015-08-07 20:55:59

标签: javascript google-chrome settimeout

我正在使用标准Notification API为我的网络应用程序处理桌面通知。出于初步开发的目的,我使用的是谷歌浏览器。使用Chrome时,当页面创建Notification对象时,通知将永久保留在桌面上。

.close()原型确实有一个setTimeout方法,允许关闭之前调用过的通知。我认为这与setTimeout函数一起使用会在几秒钟之后自动解除通知。我甚至发现了a guide confirming我的想法。

但是,似乎我无法使用.close()函数使通知的范围正常工作,并且不会为每个创建的通知正确调用<button onclick="notifyMe()"> Notify me! </button> 方法。

以下是我的尝试(我使用another answer中的一些代码作为起点):

按钮:

<script>
// request permission on page load
document.addEventListener('DOMContentLoaded', function () {
  if (Notification.permission !== "granted")
    Notification.requestPermission();
});

function notifyMe() {
  if (!Notification) {
    //alert('Desktop notifications not available in your browser. Try Chromium.'); 
    return;
  }

  if (Notification.permission !== "granted")
    Notification.requestPermission();
  else {
    var notification = new Notification('Notification');

    notification.onclick = function () {
        window.focus();
    };

    setTimeout(notification.close, 2000);
    // Result: Uncaught TypeError: Illegal invocation

    // also tried.....

    // setTimeout(notification.close(), 2000);
    // Result: notification stays open forever

    // setTimeout('notification.close', 2000);
    // Result: ReferenceError: notification is not defined

  }

}
</script>

JavaScript的:

{{1}}

如果有经验的人能帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:11)

当我将其包装成function() {}时,它可以工作:

setTimeout(function() { notification.close() }, 2000);

看到这个小提琴:https://jsfiddle.net/drnz12n8/2/