From a84a5c0571a4236bb2cc18262a791103af986d8a Mon Sep 17 00:00:00 2001 From: Alex Yusiuk <55661041+RRRadicalEdward@users.noreply.github.com> Date: Fri, 4 Jul 2025 12:59:33 +0300 Subject: [PATCH] fix(web): prevent `onMonitorClipboard` from re-scheduling after `iron-remote-desktop` component destroys (#856) --- .../src/iron-remote-desktop.svelte | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/web-client/iron-remote-desktop/src/iron-remote-desktop.svelte b/web-client/iron-remote-desktop/src/iron-remote-desktop.svelte index 4cdeff0b..b21b46f3 100644 --- a/web-client/iron-remote-desktop/src/iron-remote-desktop.svelte +++ b/web-client/iron-remote-desktop/src/iron-remote-desktop.svelte @@ -71,6 +71,8 @@ let lastSentClipboardData: ClipboardData | null = null; let lastClipboardMonitorLoopError: Error | null = null; + let componentDestroyed = false; + /* Firefox-specific BEGIN */ // See `ffRemoteClipboardData` variable docs below @@ -185,12 +187,11 @@ // Called periodically to monitor clipboard changes async function onMonitorClipboard() { - if (!document.hasFocus()) { - setTimeout(onMonitorClipboard, CLIPBOARD_MONITORING_INTERVAL); - return; - } - try { + if (!document.hasFocus()) { + return; + } + var value = await navigator.clipboard.read(); // Clipboard is empty @@ -291,7 +292,9 @@ lastClipboardMonitorLoopError = err; } } finally { - setTimeout(onMonitorClipboard, CLIPBOARD_MONITORING_INTERVAL); + if (!componentDestroyed) { + setTimeout(onMonitorClipboard, CLIPBOARD_MONITORING_INTERVAL); + } } } @@ -723,6 +726,7 @@ onDestroy(() => { window.removeEventListener('resize', resizeHandler); + componentDestroyed = true; });