From 8554184beb110f37a757f0713306e7d5f384c461 Mon Sep 17 00:00:00 2001 From: Robert Long <robert@robertlong.me> Date: Mon, 9 Aug 2021 17:44:26 -0700 Subject: [PATCH] Handle pagehide and visibilitychange events in safari --- src/ConferenceCallManagerHooks.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/ConferenceCallManagerHooks.js b/src/ConferenceCallManagerHooks.js index 154fa35..6aa5a0c 100644 --- a/src/ConferenceCallManagerHooks.js +++ b/src/ConferenceCallManagerHooks.js @@ -161,9 +161,12 @@ export function useVideoRoom(manager, roomId, timeout = 5000) { } // iOS doesn't fire beforeunload event, so leave the call when you hide the page. - const unloadEvent = isIOS() ? "visibilitychange" : "beforeunload"; + if (isIOS()) { + window.addEventListener("pagehide", onBeforeUnload); + document.addEventListener("visibilitychange", onBeforeUnload); + } - window.addEventListener(unloadEvent, onBeforeUnload); + window.addEventListener("beforeunload", onBeforeUnload); const onParticipantsChanged = () => { setState((prevState) => ({ @@ -219,7 +222,9 @@ export function useVideoRoom(manager, roomId, timeout = 5000) { return () => { manager.client.removeListener("Room", roomCallback); manager.removeListener("participants_changed", onParticipantsChanged); - window.removeEventListener(unloadEvent, onBeforeUnload); + window.removeEventListener("pagehide", onBeforeUnload); + document.removeEventListener("visibilitychange", onBeforeUnload); + window.removeEventListener("beforeunload", onBeforeUnload); clearTimeout(timeoutId); manager.leaveCall(); };