// version-loader.js (function () { const version = '20250430'; const bustUrl = (url) => { if (!url || url.startsWith('data:') || url.startsWith('http')) return url; const [base] = url.split('?'); const sep = base.includes('?') ? '&' : '?'; return `${base}${sep}v=${version}`; }; window.addEventListener('DOMContentLoaded', () => { // CSS document.querySelectorAll('link[rel="stylesheet"]').forEach(link => { link.href = bustUrl(link.href); }); // JS(外部スクリプトはスキップ) const myScript = document.currentScript; 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); }); // 画像・動画・その他 src 属性を持つ要素(外部は除外) document.querySelectorAll('img[src], video[src], source[src]').forEach(el => { if (!el.src.startsWith(location.origin)) return; el.src = bustUrl(el.src); }); // preload / favicon など(必要あれば) document.querySelectorAll('link[rel="preload"], link[rel="icon"]').forEach(link => { if (!link.href.startsWith(location.origin)) return; link.href = bustUrl(link.href); }); }); })();