1

我一直在尋找HTML通知和服務工作者的狀態,並想知道 - 是否有可能顯示延遲通知?基本上,我希望能夠說「在30分鐘內提醒我」(或其他),然後在30分鐘後向用戶推送通知。這可能會立即計劃,但我沒有看到任何允許它的功能。延遲HTML5通知?

我是否錯過了某些東西,或者在特別是Chrome API的當前狀態下是不可能的?

+1

爲什麼不直接通過超時處理程序發送通知? – Pointy

+0

@像這樣的事情表明它不會工作:https://github.com/slightlyoff/ServiceWorker/issues/107在任何情況下,它可能意味着服務人員不斷在後臺運行,對移動設備看起來非常好。 – Alastair

+0

請參閱https://github.com/slightlyoff/BackgroundSync/blob/master/explainer.md#periodic-synchronization瞭解可能的方法,但有幾點需要注意:目前尚未在任何瀏覽器中實現,但它不會爲您提供一個關於確切執行時間的保證,它意味着重複發生的事件(所以你需要在第一個事件觸發後取消註冊)。 –

回答

0

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

如果沒有別的東西,我會將其標記爲正確的,但是我希望有一些事情不需要讓標籤始終保持打開狀態 - 特別是在移動人員不太可能這樣做的時候。 – Alastair

4

這是可能的,但不是直接與服務人員,至少在其目前的形式。這並不簡單,因爲服務人員無法保持半小時的清醒狀態,或以setTimeoutsetInterval喚醒自己。瀏覽器會關閉工作人員,並且不會記錄任何超時或間隔。你可以用打開的標籤中的信息來喚醒它,但是你說你不需要保持開放標籤,並且如果你假設一個開放的標籤,那麼爲什麼即使打擾服務工作者呢?正如Jeff Posnick在評論中所建議的那樣,您最終可能會使用Sync或PeriodicSync API,但是,正如他還指出的那樣,它們還沒有實現,因此無論如何都不是真正用於此目的。

可以完成您在使用Chrome的Push API當前版本想要的東西,但你必須包括在循環中的服務器,併爲自己設定了一個推送通知服務(即GCM)。下面是它如何工作,大致爲:

  • 當你決定推遲的通知,讓服務器知道它
  • 的延遲之後,在服務器上爲用戶
  • 服務發送一個推送消息工人響應推醒了,並創建一個新的通知

最後這部分將是一個麻煩,因爲目前你不能真正以推動發送任何類型的有效載荷,所以你的服務人員將需要一些搞清楚通知應該是什麼的方法。也許服務器有一個暫停通知列表,服務工作者可以從那裏獲取它,或者你可以將它們保存在IndexedDB中。