diff --git a/src/platform/web/dom/ServiceWorkerHandler.js b/src/platform/web/dom/ServiceWorkerHandler.js index d2dacc6b..dd2c755f 100644 --- a/src/platform/web/dom/ServiceWorkerHandler.js +++ b/src/platform/web/dom/ServiceWorkerHandler.js @@ -76,6 +76,8 @@ export class ServiceWorkerHandler { // this flag is read in fetch.js this.haltRequests = true; event.source.postMessage({replyTo: data.id}); + } else if (data.type === "openRoom") { + this._navigation.push("room", data.payload.roomId); } } diff --git a/src/platform/web/service-worker.js b/src/platform/web/service-worker.js index 7001600a..29b124d9 100644 --- a/src/platform/web/service-worker.js +++ b/src/platform/web/service-worker.js @@ -196,13 +196,13 @@ async function openClientFromNotif(event) { const {sessionId, roomId} = event.notification.data; const sessionHash = `#/session/${sessionId}`; const roomHash = `${sessionHash}/room/${roomId}`; - const roomURL = `/${roomHash}`; const clientWithSession = await findClient(async client => { return await sendAndWaitForReply(client, "hasSessionOpen", {sessionId}); }); if (clientWithSession) { console.log("notificationclick: client has session open, showing room there"); - clientWithSession.navigate(roomURL); + // use a message rather than clientWithSession.navigate here as this refreshes the page on chrome + clientWithSession.postMessage({type: "openRoom", payload: {roomId}}); if ('focus' in clientWithSession) { try { await clientWithSession.focus(); @@ -210,6 +210,7 @@ async function openClientFromNotif(event) { } } else if (self.clients.openWindow) { console.log("notificationclick: no client found with session open, opening new window"); + const roomURL = new URL(`./${roomHash}`, baseURL).href; await self.clients.openWindow(roomURL); } }