From 4384ee53c5ac3bc10e33b6c9edded9f6b957e831 Mon Sep 17 00:00:00 2001 From: Roe-xin Date: Fri, 6 Mar 2026 10:05:52 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E9=9D=A2=E6=9D=BF=E5=90=8E=E5=BF=AB=E6=8D=B7=E9=94=AE=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E8=87=AA=E5=8A=A8=E6=89=93=E5=BC=80=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 通过 try-catch 检测 webview 是否真正可用 - 修复 panel._isDisposed 检测不准确的问题 - 增加异常捕获防止发送消息时崩溃 - 延长消息发送延迟至 500ms 确保面板加载完成 --- src/extension.ts | 57 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 5307e02..2f436d3 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -286,8 +286,12 @@ export async function activate(context: vscode.ExtensionContext) { const addCodeToChat = vscode.commands.registerCommand( "ic-coder.addCodeToChat", async () => { + console.log('[addCodeToChat] 命令触发'); const editor = vscode.window.activeTextEditor; - if (!editor) return; + if (!editor) { + console.log('[addCodeToChat] 没有活动编辑器'); + return; + } const selection = editor.selection; const selectedText = editor.document.getText(selection); @@ -303,24 +307,53 @@ export async function activate(context: vscode.ExtensionContext) { // 检查是否已有打开的面板 let panel = (global as any).currentICHelperPanel; - if (!panel || panel._isDisposed) { + let needCreatePanel = false; + + if (!panel) { + needCreatePanel = true; + } else { + // 尝试访问 webview,如果抛出异常说明已销毁 + try { + const _ = panel.webview; + } catch (e) { + needCreatePanel = true; + } + } + + console.log('[addCodeToChat] 需要创建面板:', needCreatePanel); + + if (needCreatePanel) { + console.log('[addCodeToChat] 正在打开面板...'); await showICHelperPanel(context); panel = (global as any).currentICHelperPanel; + console.log('[addCodeToChat] 面板打开后状态:', panel ? '成功' : '失败'); + + // 如果面板仍未创建(如未登录),直接返回 + if (!panel) { + console.log('[addCodeToChat] 面板创建失败,退出'); + return; + } } // 发送代码上下文 + console.log('[addCodeToChat] 准备发送代码到面板'); setTimeout(() => { - if (panel?.webview) { - panel.webview.postMessage({ - command: 'addCodeContext', - fileName, - startLine, - endLine, - code: selectedText, - languageId: editor.document.languageId - }); + try { + if (panel?.webview) { + console.log('[addCodeToChat] 发送 addCodeContext 消息'); + panel.webview.postMessage({ + command: 'addCodeContext', + fileName, + startLine, + endLine, + code: selectedText, + languageId: editor.document.languageId + }); + } + } catch (e) { + console.log('[addCodeToChat] 发送消息失败:', e); } - }, 300); + }, 500); } );