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
This commit is contained in:
parent
eb16815f91
commit
078bb6e313
@ -938,20 +938,27 @@ export default function DocsPage() {
|
|||||||
|
|
||||||
// Auto-refresh preview when remote changes arrive in collab mode
|
// Auto-refresh preview when remote changes arrive in collab mode
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!collab.active || !collab.yText) return;
|
if (!collab.active || !collab.yText || !selectedFile) return;
|
||||||
let refreshTimer: ReturnType<typeof setTimeout>;
|
let refreshTimer: ReturnType<typeof setTimeout>;
|
||||||
const observer = () => {
|
const observer = () => {
|
||||||
clearTimeout(refreshTimer);
|
clearTimeout(refreshTimer);
|
||||||
refreshTimer = setTimeout(() => {
|
refreshTimer = setTimeout(() => {
|
||||||
previewIframeRef.current?.contentWindow?.location.reload();
|
// Re-set src to force reload (avoids cross-origin issues with contentWindow.reload)
|
||||||
}, 2000);
|
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);
|
collab.yText.observe(observer);
|
||||||
return () => {
|
return () => {
|
||||||
collab.yText?.unobserve(observer);
|
collab.yText?.unobserve(observer);
|
||||||
clearTimeout(refreshTimer);
|
clearTimeout(refreshTimer);
|
||||||
};
|
};
|
||||||
}, [collab.active, collab.yText]);
|
}, [collab.active, collab.yText, selectedFile]);
|
||||||
|
|
||||||
const handleToolbarSnippet = useCallback((snippetId: string) => {
|
const handleToolbarSnippet = useCallback((snippetId: string) => {
|
||||||
if (snippetId === 'video-card') {
|
if (snippetId === 'video-card') {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user