This is quite an old Q now, but I will give my take.
I'm not sure I can provide a full answer, but will write down my understanding based on having a similar issue.
You cannot post messages to clients during the "install" event due to the fact that an event listener for messages on your serviceWorker will only pick up messages from your active controller.
During install, the previous serviceWorker is still in control.
I am using broadcast channels to get around this. i.e.
Notify to a specific broadcast channel in the new serviceworker on install.
Subscribe to the same broadcast channel in your .js and use that for your onmessage event listener.
I would be interested to hear if there are other "better" solutions.