From 28f96bda8415cfabd2df948114cb21c5321164c0 Mon Sep 17 00:00:00 2001 From: Hunaid Hassan Date: Wed, 29 Jul 2026 23:22:04 +0200 Subject: [PATCH] Re-subscribe listeners after a back-forward cache restore WebKit reuses the document on a bfcache restore without re-running the page's scripts, so median://events/subscribe is never re-sent and every listener on the page goes dead. Re-subscribe on pageshow with persisted. --- src/utils/listener.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/utils/listener.ts b/src/utils/listener.ts index 2d19257..68c983c 100644 --- a/src/utils/listener.ts +++ b/src/utils/listener.ts @@ -21,6 +21,20 @@ function setSubscription(eventName: string, subscribe: boolean) { } } +// A back-forward cache restore reuses the document without re-running scripts, +// so the page never re-sends median://events/subscribe. Re-subscribe for it. +if (typeof window !== 'undefined' && typeof window.addEventListener === 'function') { + window.addEventListener('pageshow', (event) => { + if ((event as PageTransitionEvent).persisted) { + Object.keys(listeners).forEach((functionName) => { + if (Object.keys(listeners[functionName]).length > 0) { + setSubscription(functionName, true); + } + }); + } + }); +} + const addListener = (functionName: string, callback: (data: T) => void) => { const functionId = createTempFunctionName(functionName);