diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/BrowserPane/hooks/usePersistentWebview/usePersistentWebview.ts b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/BrowserPane/hooks/usePersistentWebview/usePersistentWebview.ts index e6e0de0b53b..81091f781b9 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/BrowserPane/hooks/usePersistentWebview/usePersistentWebview.ts +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/TabView/BrowserPane/hooks/usePersistentWebview/usePersistentWebview.ts @@ -280,12 +280,21 @@ export function usePersistentWebview({ const handleDomReady = () => { markPersistentWebviewDomReady(paneId); - const webContentsId = wv.getWebContentsId(); - const previousId = getRegisteredWebContentsId(paneId); - // Register on first load, or re-register if webContentsId changed - if (previousId !== webContentsId) { - setRegisteredWebContentsId(paneId, webContentsId); - registerBrowserRef.current({ paneId, webContentsId }); + + if (wv.isConnected) { + try { + const webContentsId = wv.getWebContentsId(); + const previousId = getRegisteredWebContentsId(paneId); + // Register on first load, or re-register if webContentsId changed + if (previousId !== webContentsId) { + setRegisteredWebContentsId(paneId, webContentsId); + registerBrowserRef.current({ paneId, webContentsId }); + } + } catch { + // WebView was detached between the isConnected check and + // getWebContentsId call — skip registration but still + // attempt to drain the pending navigation below. + } } const pendingUrl = getPendingPersistentWebviewNavigation(paneId);