From 2d87c267cf7a3f17d4626777bb5d686df6715e56 Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Sun, 22 Mar 2026 00:06:01 +0800 Subject: [PATCH] fix: wait for renderer ready before sending tab data - Wait for did-finish-load event in transfer-tab-data handler - Await transferTabData before closing file in handlePopOut - Remove arbitrary 500ms timeout, now uses proper IPC ack flow --- electron/main.ts | 11 +++++++++++ src/pages/NoteBrowser.tsx | 4 +--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/electron/main.ts b/electron/main.ts index 2ce7263..30a1316 100644 --- a/electron/main.ts +++ b/electron/main.ts @@ -497,7 +497,18 @@ ipcMain.handle('transfer-tab-data', async (_event, windowId: number, tabData: an if (!win) { return { success: false, error: 'Window not found' }; } + + await new Promise((resolve) => { + if (win.webContents.isLoading()) { + win.webContents.once('did-finish-load', () => resolve()); + } else { + resolve(); + } + setTimeout(resolve, 2000); + }); + win.webContents.send('tab-data-received', tabData); + log.info('[PopOut] Tab data sent to window:', windowId); return { success: true }; } catch (error: any) { log.error('[PopOut] Failed to transfer tab data:', error); diff --git a/src/pages/NoteBrowser.tsx b/src/pages/NoteBrowser.tsx index eb32a68..f00b8aa 100644 --- a/src/pages/NoteBrowser.tsx +++ b/src/pages/NoteBrowser.tsx @@ -135,9 +135,7 @@ export const NoteBrowser = () => { const result = await window.electronAPI?.createWindow({ route, title: file.name }) if (result?.success && result.windowId) { - setTimeout(() => { - window.electronAPI?.transferTabData(result.windowId!, tabData) - }, 500) + await window.electronAPI?.transferTabData(result.windowId!, tabData) } closeFile(file)