// version-loader.js (function () { const version = '20250423'; const bustUrl = (url) => { if (!url || url.startsWith('data:') || url.startsWith('http')) return url; return `${url.split('?')[0]}?v=${version}`; }; window.addEventListener('DOMContentLoaded', () => { const origin = location.origin; // CSS document.querySelectorAll('link[rel="stylesheet"]').forEach(link => { if (link.href.startsWith(origin)) { link.href = bustUrl(link.href); } }); // JS(自身と外部スクリプトを除外) const myScript = document.currentScript || document.querySelector('script[src*="version-loader"]'); document.querySelectorAll('script[src]').forEach(script => { if (script === myScript || script.src.startsWith('http')) return; const newScript = document.createElement('script'); newScript.src = bustUrl(script.src); if (script.defer) newScript.defer = true; if (script.type) newScript.type = script.type; script.replaceWith(newScript); }); // メディア(img, video, source) document.querySelectorAll('img[src], video[src], source[src]').forEach(el => { const src = el.getAttribute('src'); if (src && src.startsWith('/') || src.startsWith(origin)) { el.src = bustUrl(src); } }); // preload / favicon document.querySelectorAll('link[rel="preload"], link[rel="icon"]').forEach(link => { if (link.href.startsWith(origin)) { link.href = bustUrl(link.href); } }); }); })(); // フェードイン(別トリガーとして保持) window.addEventListener('DOMContentLoaded', () => { requestAnimationFrame(() => { document.body.classList.add('show'); }); });