From 220f3e0781811359bd283ff7b1b168a4a2468810 Mon Sep 17 00:00:00 2001 From: Mehul <5mehulhelp5@gmail.com> Date: Fri, 10 Oct 2025 14:41:40 +0530 Subject: [PATCH 1/2] cross browser capability and ajax add to cart speculation issue --- view/frontend/templates/bfcache/handler.phtml | 33 +++++++++++++++++-- .../templates/hyva/bfcache/handler.phtml | 33 ++++++++++++++++--- 2 files changed, 59 insertions(+), 7 deletions(-) diff --git a/view/frontend/templates/bfcache/handler.phtml b/view/frontend/templates/bfcache/handler.phtml index b48b663..4f36a14 100644 --- a/view/frontend/templates/bfcache/handler.phtml +++ b/view/frontend/templates/bfcache/handler.phtml @@ -150,11 +150,38 @@ $script = << (window._bfcacheHandler ??= new BFCacheHandler()).init(); + + // 1️⃣ Chrome / Firefox / Safari / Edge — BFCache restore + window.addEventListener('pageshow', (event) => { - if (event.persisted) { - (window._bfcacheHandler ??= new BFCacheHandler()).init(); - } + const navType = performance.getEntriesByType('navigation')[0]?.type; + if (event.persisted || navType === 'back_forward') { + initHandler(); + } }, { passive: true }); + + // 2️⃣ Chrome / Edge — prerendering API + if ('prerendering' in document || 'onprerenderingchange' in document) { + document.addEventListener('prerenderingchange', () => { + if (!window._bfcacheHandler?._initialized) { + window._bfcacheHandler = new BFCacheHandler(); + window._bfcacheHandler._initialized = true; + window._bfcacheHandler.init(); + } + }, { passive: true }); + } + + // 3️⃣ Safari / Legacy fallback — visibilitychange + + document.addEventListener('visibilitychange', () => { + if (document.visibilityState === 'visible' && !window._bfcacheHandler?._initialized) { + window._bfcacheHandler = new BFCacheHandler(); + window._bfcacheHandler._initialized = true; + window._bfcacheHandler.init(); + } + }, { passive: true }); + })(); JS; ?> diff --git a/view/frontend/templates/hyva/bfcache/handler.phtml b/view/frontend/templates/hyva/bfcache/handler.phtml index fc1c444..6ac97dc 100644 --- a/view/frontend/templates/hyva/bfcache/handler.phtml +++ b/view/frontend/templates/hyva/bfcache/handler.phtml @@ -166,13 +166,38 @@ $autoCloseMenuMobile = $bfcacheConfig->autoCloseMenuMobile() ? 'true' : 'false'; + */ + // --- Initialization with full browser coverage ---?> + const initHandler = () => (window._bfcacheHandler ??= new BFCacheHandler()).init(); + + window.addEventListener('pageshow', (event) => { - if (event.persisted) { - (window._bfcacheHandler ??= new BFCacheHandler()).init(); + const navType = performance.getEntriesByType('navigation')[0]?.type; + if (event.persisted || navType === 'back_forward') { + initHandler(); + } + }, { passive: true }); + + + if ('prerendering' in document || 'onprerenderingchange' in document) { + document.addEventListener('prerenderingchange', () => { + if (!window._bfcacheHandler?._initialized) { + window._bfcacheHandler = new BFCacheHandler(); + window._bfcacheHandler._initialized = true; + window._bfcacheHandler.init(); + } + }, { passive: true }); + } + + + document.addEventListener('visibilitychange', () => { + if (document.visibilityState === 'visible' && !window._bfcacheHandler?._initialized) { + window._bfcacheHandler = new BFCacheHandler(); + window._bfcacheHandler._initialized = true; + window._bfcacheHandler.init(); } }, { passive: true }); })(); - + registerInlineScript() ?> registerInlineScript() has to be called directly after the closing script tag! There must be no other HTML in between. */ ?> From eef92e58e23ca1719736fdfa981b8059a80f5d4f Mon Sep 17 00:00:00 2001 From: Ryan Hoerr Date: Fri, 10 Oct 2025 08:20:52 -0400 Subject: [PATCH 2/2] Removed trailing space --- view/frontend/templates/hyva/bfcache/handler.phtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/view/frontend/templates/hyva/bfcache/handler.phtml b/view/frontend/templates/hyva/bfcache/handler.phtml index 6ac97dc..29fef18 100644 --- a/view/frontend/templates/hyva/bfcache/handler.phtml +++ b/view/frontend/templates/hyva/bfcache/handler.phtml @@ -198,6 +198,6 @@ $autoCloseMenuMobile = $bfcacheConfig->autoCloseMenuMobile() ? 'true' : 'false'; } }, { passive: true }); })(); - + registerInlineScript() ?> registerInlineScript() has to be called directly after the closing script tag! There must be no other HTML in between. */ ?>