我正在使用标准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}}
如果有经验的人能帮助我,我将不胜感激。
答案 0 :(得分:11)
当我将其包装成function() {}
时,它可以工作:
setTimeout(function() { notification.close() }, 2000);
看到这个小提琴:https://jsfiddle.net/drnz12n8/2/