Задержка уведомления HTML5?
Я смотрел на состояние HTML-уведомлений и сервисных работников, и мне было интересно - можно ли показать уведомление о задержке? По сути, я хотел бы иметь возможность сказать "напомнить мне через 30 минут" (или что-то еще), а затем отправить уведомление пользователю через 30 минут. Это может быть запланировано немедленно, но я не вижу никакой функциональности, которая позволяет это.
Я что-то упустил или это невозможно в текущем состоянии (особенно) API Chrome?
2 ответа
Это возможно, но не так просто с работниками сферы обслуживания, по крайней мере, в их нынешнем виде. Это не просто, потому что работник службы не может не спать в течение получаса или проснуться с setTimeout
или же setInterval
, Браузер просто отключит работника и не будет записывать никаких таймаутов или интервалов. Вы можете разбудить его с сообщением из открытой вкладки, но вы сказали, что вам не нужно оставлять открытую вкладку, и если вы предполагаете, что открытая вкладка, то зачем вообще беспокоиться об этом? Как предложил Джефф Посник в комментарии, вы, возможно, в конечном итоге могли бы использовать API-интерфейсы Sync или PeriodicSync, но, как он также указывает, они еще не реализованы и в действительности не предназначены для этого.
Вы можете достичь того, чего хотите в текущих версиях Chrome, используя Push API, но вам придется включить сервер в цикл и настроить себя с помощью службы push-уведомлений (например, GCM). Вот как это будет работать, примерно:
- Когда вы решите отложить уведомление, сообщите об этом серверу.
- После задержки сервер отправляет push-сообщение для вашего пользователя.
- Сервисный работник просыпается в ответ на толчок и создает новое уведомление
Эта последняя часть будет хлопотной, потому что в настоящее время вы не можете на самом деле отправить какую-либо полезную нагрузку одним нажатием, поэтому вашему сервисному работнику понадобится какой-то способ выяснить, каким должно быть уведомление. Возможно, на сервере есть список отложенных уведомлений, и работник службы может получить его оттуда, или, возможно, вы сохранили их в IndexedDB.
Адаптировано из 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>