|
27 | 27 | window.addEventListener("online",function online(){
|
28 | 28 | offlineIcon.classList.add("hidden");
|
29 | 29 | isOnline = true;
|
| 30 | + sendStatusUpdate(); |
30 | 31 | },false);
|
31 | 32 | window.addEventListener("offline",function offline(){
|
32 | 33 | offlineIcon.classList.remove("hidden");
|
33 | 34 | isOnline = false;
|
| 35 | + sendStatusUpdate(); |
34 | 36 | },false);
|
35 | 37 | }
|
36 | 38 |
|
|
40 | 42 | });
|
41 | 43 |
|
42 | 44 | svcworker = swRegistration.installing || swRegistration.waiting || swRegistration.active;
|
| 45 | + sendStatusUpdate(svcworker); |
43 | 46 |
|
44 | 47 | // listen for new service worker to take over
|
45 | 48 | navigator.serviceWorker.addEventListener("controllerchange",async function onController(){
|
46 | 49 | svcworker = navigator.serviceWorker.controller;
|
| 50 | + sendStatusUpdate(svcworker); |
47 | 51 | });
|
| 52 | + |
| 53 | + navigator.serviceWorker.addEventListener("message",onSWMessage,false); |
| 54 | + } |
| 55 | + |
| 56 | + function onSWMessage(evt) { |
| 57 | + var { data } = evt; |
| 58 | + if (data.statusUpdateRequest) { |
| 59 | + console.log("Status update requested from service worker, responding..."); |
| 60 | + sendStatusUpdate(evt.ports && evt.ports[0]); |
| 61 | + } |
| 62 | + } |
| 63 | + |
| 64 | + function sendStatusUpdate(target) { |
| 65 | + sendSWMessage({ statusUpdate: { isOnline, isLoggedIn } },target); |
| 66 | + } |
| 67 | + |
| 68 | + function sendSWMessage(msg,target) { |
| 69 | + if (target) { |
| 70 | + target.postMessage(msg); |
| 71 | + } |
| 72 | + else if (svcworker) { |
| 73 | + svcworker.postMessage(msg); |
| 74 | + } |
| 75 | + else if (navigator.serviceWorker.controller) { |
| 76 | + navigator.serviceWorker.controller.postMessage(msg); |
| 77 | + } |
48 | 78 | }
|
49 | 79 |
|
50 | 80 | })();
|
0 commit comments