我一直在查看 HTML 通知和服务人员的状态,并且想知道 - 是否可以显示延迟通知?基本上,我希望能够说“30 分钟后提醒我”(或其他什么),然后在 30 分钟后向用户推送通知。这可以立即安排,但我没有看到任何允许它的功能。
我是否遗漏了什么,或者在(特别是)Chrome API 的当前状态下是不可能的?
我一直在查看 HTML 通知和服务人员的状态,并且想知道 - 是否可以显示延迟通知?基本上,我希望能够说“30 分钟后提醒我”(或其他什么),然后在 30 分钟后向用户推送通知。这可以立即安排,但我没有看到任何允许它的功能。
我是否遗漏了什么,或者在(特别是)Chrome API 的当前状态下是不可能的?
这对于服务人员来说是可能的,但并不简单,至少在他们目前的形式中是这样。这并不简单,因为服务人员无法让自己保持半小时清醒或使用 or 唤醒setTimeout
自己setInterval
。浏览器只会关闭工作程序,并且不会记录任何超时或间隔。您可以通过打开标签中的消息将其唤醒,但您说您不想必须保持打开标签,如果您假设打开标签,那么为什么还要打扰服务人员?正如 Jeff Posnick 在评论中所建议的那样,您可能最终可以使用 Sync 或 PeriodicSync API,但是,正如他也指出的那样,它们尚未实现,并且无论如何也不是真正用于此目的。
您可以使用Push API在当前版本的 Chrome 中完成您想要的操作,但您必须将服务器包含在循环中并设置自己的推送通知服务(即 GCM)。这是它的工作原理,大致如下:
最后一部分会很麻烦,因为目前您实际上无法通过推送发送任何类型的有效负载,因此您的服务工作者将需要某种方式来确定通知应该是什么。也许服务器有一个已暂停通知的列表,服务工作者可以从那里获取它,或者你可能将它们保存在 IndexedDB 中。
<script>
var Notification = window.Notification || window.mozNotification || window.webkitNotification;
function show() {
window.setTimeout(function () {
var instance = new Notification("Hello World!");
}, 5000);
return false;
}
</script>
<a href="#" onclick="return show()">Notify me!</a>