From bb21b7c20d0d4654bbb6c67223086699dae8d89a Mon Sep 17 00:00:00 2001 From: Terence Quashie Date: Fri, 8 May 2026 10:05:17 +0000 Subject: [PATCH] fix(history): remove visibilitychange listener to prevent focus steal in Edge Fixes focus stealing in edge, does not affect Safari IOS scroll position --- packages/router/src/history/html5.ts | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/packages/router/src/history/html5.ts b/packages/router/src/history/html5.ts index afdc05cff..b10dc7b1e 100644 --- a/packages/router/src/history/html5.ts +++ b/packages/router/src/history/html5.ts @@ -127,14 +127,12 @@ function useHistoryListeners( } function beforeUnloadListener() { - if (document.visibilityState === 'hidden') { - const { history } = window - if (!history.state) return - history.replaceState( - assign({}, history.state, { scroll: computeScrollPosition() }), - '' - ) - } + const { history } = window + if (!history.state) return + history.replaceState( + assign({}, history.state, { scroll: computeScrollPosition() }), + '' + ) } function destroy() { @@ -142,16 +140,13 @@ function useHistoryListeners( teardowns = [] window.removeEventListener('popstate', popStateHandler) window.removeEventListener('pagehide', beforeUnloadListener) - document.removeEventListener('visibilitychange', beforeUnloadListener) } // set up the listeners and prepare teardown callbacks window.addEventListener('popstate', popStateHandler) // https://developer.chrome.com/blog/page-lifecycle-api/ - // note: iOS safari does not fire beforeunload, so we - // use pagehide and visibilitychange instead + // note: iOS safari does not fire beforeunload, so we use pagehide instead window.addEventListener('pagehide', beforeUnloadListener) - document.addEventListener('visibilitychange', beforeUnloadListener) return { pauseListeners,