我目前正在使用以下代码为我的控制台生成HTML5桌面通知。
<script type="text/javascript">
$(document).ready(function() {
$('#show_button').click(function(e) {
e.preventDefault();
window.webkitNotifications.requestPermission();
});
if (window.webkitNotifications.checkPermission() == 0) {
notification = window.webkitNotifications.createNotification('favicon.ico', 'New orders!', 'You have new orders.');
notification.show();
setTimeout(function() {
notification.cancel();
}, '5000');
}
});
</script>
5秒后通知会再次出现和消失,但如果我在5秒钟之前点击新页面或关闭窗口,则通知不会关闭。由于页面设置为每5分钟刷新一次,因此可能会出现许多通知,然后需要手动关闭每个通知。
是否有方法可以检查Javascript是否有任何先前的通知等待并关闭它们,或者确保即使窗口关闭也会消失通知?
答案 0 :(得分:1)
根据:Reliably Dismissing Webkit Notifications
使用window.onunload或window.onbeforeunload处理程序清除页面关闭时的通知。但是,这不会保留三秒钟的延迟,因为通知将在页面关闭时立即关闭。
另一个选项(保留三秒延迟)是使用createHTMLNotification(url)从HTML页面创建通知。通过在通知HTML文档中包含类似setTimeout(window.close,3000)的脚本,使通知页面自行关闭。在这种情况下,显然,您不需要在主页面中调用setTimeout,因为它已包含在通知中。
此代码有效:但是,在Chrome上,它仅在更改或关闭页面时有效,它似乎无法在刷新时工作。这是Chromium wiki中记录的错误,所以我认为这很快就会得到修复......
$(window).on('beforeunload', function() {
notification.cancel();
});