- From: Ayke <notifications@github.com>
- Date: Thu, 30 Jul 2015 11:32:59 -0700
- To: slightlyoff/ServiceWorker <ServiceWorker@noreply.github.com>
- Message-ID: <slightlyoff/ServiceWorker/issues/728@github.com>
I am trying to send a message to a page from a serviceWorker. The goal is to let the page respond to the click (opening what the notification is about).
With this code inside a `notificationclick` event handler:
```javascript
clients.openWindow(url).then(function(client) {
client.postMessage(message);
});
```
There is a race between delivering the message event and attaching the `message` event listener (while loading the page). Experimentally, I have found that the only way to receive the event is to add the `message` event listener before `<html>`, like so:
```html
<!DOCTYPE html>
<script>
navigator.serviceWorker.addEventListener('message', function (event) {
console.log('got message:', event.data);
});
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
(...)
```
This appears very unreliable to me.
A possible solution is letting the promise resolve around the `DOMContentLoaded` or `load` events. Another option could be to let the service worker detect when the page is loaded (via an event).
I have used a workaround: sending the needed information in the URL fragment identifier and navigating to the proper URL using `history.replaceState` in the client (webpage). This works reliable so far.
---
Reply to this email directly or view it on GitHub:
https://github.com/slightlyoff/ServiceWorker/issues/728
Received on Thursday, 30 July 2015 18:33:27 UTC