From ba43b40fc1517e1e2bf9c2401601f9d3a503a985 Mon Sep 17 00:00:00 2001 From: seo Date: Fri, 10 Jul 2026 19:07:09 +0900 Subject: [PATCH] =?UTF-8?q?asset=20reload=20HTTP=20=EC=BA=90=EC=8B=9C=20?= =?UTF-8?q?=EB=B3=B4=EA=B0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/asset-reload.js | 39 +++++++++++++++++++++++++++++++++++ public/index.php | 2 +- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/public/assets/asset-reload.js b/public/assets/asset-reload.js index 1b291bb..12a6a6a 100644 --- a/public/assets/asset-reload.js +++ b/public/assets/asset-reload.js @@ -26,6 +26,45 @@ return parsed.toString(); } + function sameOriginUrl(url) { + try { + var parsed = new URL(url, window.location.href); + return parsed.origin === window.location.origin ? parsed : null; + } catch (e) { + return null; + } + } + + function addAssetToken(element, attr, token) { + var current = element && element.getAttribute(attr); + var parsed = current ? sameOriginUrl(current) : null; + if (!parsed || parsed.searchParams.get('assetReload') === token) return; + + parsed.searchParams.set('assetReload', token); + element.setAttribute(attr, parsed.pathname + parsed.search + parsed.hash); + } + + function applyAssetToken(token) { + if (!token) return; + + document.querySelectorAll('script[src]').forEach(function (element) { + addAssetToken(element, 'src', token); + }); + document.querySelectorAll('link[href]').forEach(function (element) { + var rel = (element.getAttribute('rel') || '').toLowerCase(); + if (rel.indexOf('stylesheet') === -1 && rel.indexOf('icon') === -1 && rel.indexOf('manifest') === -1) return; + addAssetToken(element, 'href', token); + }); + } + + var currentAssetToken = new URL(window.location.href).searchParams.get('assetReload') || ''; + if (currentAssetToken) { + applyAssetToken(currentAssetToken); + new MutationObserver(function () { + applyAssetToken(currentAssetToken); + }).observe(document.documentElement, { childList: true, subtree: true }); + } + function deleteCaches() { if (!window.caches || !window.caches.keys) return Promise.resolve(); diff --git a/public/index.php b/public/index.php index 44c7ee0..7e965d9 100644 --- a/public/index.php +++ b/public/index.php @@ -76,7 +76,7 @@ $loggedIn = signed_in(); - +