diff --git a/src/dom.js b/src/dom.js index d54a63f..c74d43b 100644 --- a/src/dom.js +++ b/src/dom.js @@ -571,9 +571,18 @@ export function popup( } if (closeOnUnload) { - window.addEventListener("pagehide", () => win.close()); - window.addEventListener("unload", () => win.close()); - window.addEventListener("beforeunload", () => win.close()); + window.addEventListener("beforeunload", () => { + win.close(); + }); + if ("onpagehide" in window) { + window.addEventListener("pagehide", () => { + win.close(); + }); + } else { + window.addEventListener("unload", () => { + win.close(); + }); + } } return win; diff --git a/test/tests/dom/popup.js b/test/tests/dom/popup.js index 0b12bca..f1fef7f 100644 --- a/test/tests/dom/popup.js +++ b/test/tests/dom/popup.js @@ -23,17 +23,20 @@ describe("popup", () => { closeOnUnload: 1, }); - if (!listeners.unload) { - throw new Error(`Popup should have unload listener registered.`); - } - - if (!listeners.pagehide) { - throw new Error(`Popup should have pagehide listener registered.`); - } - if (!listeners.beforeunload) { throw new Error(`Popup should have beforeunload listener registered.`); } + + // Check that either pagehide or unload is registered (but not both) + if ("onpagehide" in window) { + if (!listeners.pagehide) { + throw new Error(`Popup should have pagehide listener registered.`); + } + } else { + if (!listeners.unload) { + throw new Error(`Popup should have unload listener registered.`); + } + } } catch (e) { throw new Error( `Test should not fail with closeOnUnload option - ${e.message}`