4

我一直在查看 HTML 通知和服务人员的状态,并且想知道 - 是否可以显示延迟通知?基本上,我希望能够说“30 分钟后提醒我”(或其他什么),然后在 30 分钟后向用户推送通知。这可以立即安排,但我没有看到任何允许它的功能。

我是否遗漏了什么,或者在(特别是)Chrome API 的当前状态下是不可能的?

4

2 回答 2

5

这对于服务人员来说是可能的,但并不简单,至少在他们目前的形式中是这样。这并不简单,因为服务人员无法让自己保持半小时清醒或使用 or 唤醒setTimeout自己setInterval。浏览器只会关闭工作程序,并且不会记录任何超时或间隔。您可以通过打开标签中的消息将其唤醒,但您说您不想必须保持打开标签,如果您假设打开标签,那么为什么还要打扰服务人员?正如 Jeff Posnick 在评论中所建议的那样,您可能最终可以使用 Sync 或 PeriodicSync API,但是,正如他也指出的那样,它们尚未实现,并且无论如何也不是真正用于此目的。

可以使用Push API在当前版本的 Chrome 中完成您想要的操作,但您必须将服务器包含在循环中并设置自己的推送通知服务(即 GCM)。这是它的工作原理,大致如下:

  • 当您决定延迟通知时,请告知服务器
  • 延迟后,服务器会为您的用户发送推送消息
  • service worker 响应推送被唤醒并创建一个新的通知

最后一部分会很麻烦,因为目前您实际上无法通过推送发送任何类型的有效负载,因此您的服务工作者将需要某种方式来确定通知应该是什么。也许服务器有一个已暂停通知的列表,服务工作者可以从那里获取它,或者你可能将它们保存在 IndexedDB 中。

于 2015-07-22T17:31:53.987 回答
1

改编自https://developer.cdn.mozilla.net/media/uploads/demos/e/l/elfoxero/c17223c414d8ddafb7808972b5617d9e/html5-notifications_1400214081_demo_package/

<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>
于 2015-07-21T21:53:53.370 回答