Why does service worker fail after a hard reload (Ctrl-Shift-R)?
---- case 1 CHROME --- success
- Uninstall service worker
- Load page
- Page installs service worker
- Worker.postMessage() succeeds
- reload page
- Worker.postMessage() succeeds
---- case 2 CHROME --- failure
- Uninstall service worker
- Load page
- Page installs service worker
- Worker.postMessage() succeeds
- HARD RELOAD (ctrl-shift-R) page (serviceworker still running according to chrome://serviceworker-internals/ )
- Worker.postMessage() fails -- 'error sendingTypeError: Cannot read property 'postMessage' of null'
When you shift-reload, the reloaded page will not be controlled by a service worker. This is part of the service worker specification.
This just applies for that next page load. Future page loads (that don't involve shift-reload) will continue to be controlled by a service worker, assuming that the page is in scope of one.
During development you can use, for example, Chrome's Dev-Tools and set that the service workers are updated on each reload:
For further reference you can read Googles Web Essentials on this topic.