From 078bb6e313662ad85a66395b49d35380a01c559f Mon Sep 17 00:00:00 2001 From: bunker-admin Date: Fri, 27 Mar 2026 13:41:02 -0600 Subject: [PATCH] Fix collab preview refresh: use src reassignment with cache-buster instead of contentWindow.reload Cross-origin iframes may silently fail on contentWindow.location.reload(). Use src reassignment with cache-buster query param to force fresh load. Increased debounce to 2.5s to give MkDocs more time to rebuild. Bunker Admin --- admin/src/pages/DocsPage.tsx | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/admin/src/pages/DocsPage.tsx b/admin/src/pages/DocsPage.tsx index d7016b4e..668928f0 100644 --- a/admin/src/pages/DocsPage.tsx +++ b/admin/src/pages/DocsPage.tsx @@ -938,20 +938,27 @@ export default function DocsPage() { // Auto-refresh preview when remote changes arrive in collab mode useEffect(() => { - if (!collab.active || !collab.yText) return; + if (!collab.active || !collab.yText || !selectedFile) return; let refreshTimer: ReturnType; const observer = () => { clearTimeout(refreshTimer); refreshTimer = setTimeout(() => { - previewIframeRef.current?.contentWindow?.location.reload(); - }, 2000); + // Re-set src to force reload (avoids cross-origin issues with contentWindow.reload) + if (previewIframeRef.current && selectedFile) { + const url = filePathToMkDocsUrl(selectedFile); + // Append cache-buster to force fresh load + const buster = `_t=${Date.now()}`; + const sep = url.includes('?') ? '&' : '?'; + previewIframeRef.current.src = url + sep + buster; + } + }, 2500); }; collab.yText.observe(observer); return () => { collab.yText?.unobserve(observer); clearTimeout(refreshTimer); }; - }, [collab.active, collab.yText]); + }, [collab.active, collab.yText, selectedFile]); const handleToolbarSnippet = useCallback((snippetId: string) => { if (snippetId === 'video-card') {