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

Javascript 如何正确设置浏览器创建的桌面通知的关闭超时,javascript,google-chrome,settimeout,Javascript,Google Chrome,Settimeout,我正在使用标准为我的web应用程序处理桌面通知。在我最初的开发中,我使用的是谷歌浏览器。使用Chrome,当页面创建通知对象时,通知将永远留在桌面上 通知原型确实有一个.close()方法,该方法允许关闭以前调用过的通知。我认为,这与setTimeout函数结合使用,将使几秒钟后自动取消通知变得轻而易举。我甚至找到了我的主意 但是,我似乎无法使用setTimeout函数使通知的范围正常工作,并且没有为每个创建的通知正确调用.close()方法 以下是我尝试过的(我使用中的一些代码作为起点): 按

我正在使用标准为我的web应用程序处理桌面通知。在我最初的开发中,我使用的是谷歌浏览器。使用Chrome,当页面创建
通知
对象时,通知将永远留在桌面上

通知
原型确实有一个
.close()
方法,该方法允许关闭以前调用过的通知。我认为,这与
setTimeout
函数结合使用,将使几秒钟后自动取消通知变得轻而易举。我甚至找到了我的主意

但是,我似乎无法使用
setTimeout
函数使通知的范围正常工作,并且没有为每个创建的通知正确调用
.close()
方法

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

按钮:

<button onclick="notifyMe()">
  Notify me! 
</button>

通知我!
JavaScript:

<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>

//请求页面加载权限
document.addEventListener('DOMContentLoaded',函数(){
if(Notification.permission!=“已授予”)
Notification.requestPermission();
});
函数notifyMe(){
如果(!通知){
//警报('您的浏览器中没有桌面通知。请尝试使用Chromium');
返回;
}
if(Notification.permission!=“已授予”)
Notification.requestPermission();
否则{
风险值通知=新通知(“通知”);
notification.onclick=函数(){
window.focus();
};
setTimeout(notification.close,2000);
//结果:未捕获类型错误:非法调用
//也试过。。。。。
//setTimeout(notification.close(),2000);
//结果:通知将永远打开
//setTimeout('notification.close',2000);
//结果:ReferenceError:未定义通知
}
}

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

当我将其包装到
函数(){}
中时,它可以工作:

setTimeout(function() { notification.close() }, 2000);
看这把小提琴: