From 69e2ee071332a954ee67b8eca16ba61cfabe53ce Mon Sep 17 00:00:00 2001 From: thzxx Date: Mon, 18 May 2026 15:57:02 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B8=85=E7=90=86=E6=AD=BB=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E3=80=81=E9=94=99=E8=AF=AF=E6=B8=B2=E6=9F=93=E9=98=B2?= =?UTF-8?q?XSS=E3=80=81blob=20URL=E9=87=8A=E6=94=BE=E6=97=B6=E6=9C=BA?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- preload.js | 2 -- renderer/renderer.js | 14 +++++--------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/preload.js b/preload.js index af52ab3..ac4d16f 100644 --- a/preload.js +++ b/preload.js @@ -22,13 +22,11 @@ contextBridge.exposeInMainWorld('electronAPI', { // Events from main process onFileOpenInTab: (callback) => ipcRenderer.on('file:openInTab', (event, data) => callback(data)), - onFileOpened: (callback) => ipcRenderer.on('file:opened', (event, data) => callback(data)), onMenuSave: (callback) => ipcRenderer.on('menu:save', () => callback()), onMenuSaveAs: (callback) => ipcRenderer.on('menu:saveAs', () => callback()), onViewModeChange: (callback) => ipcRenderer.on('menu:viewMode', (event, mode) => callback(mode)), onExternalModification: (callback) => ipcRenderer.on('file:externallyModified', (event, filePath) => callback(filePath)), onConfirmClose: (callback) => ipcRenderer.on('window:confirmClose', () => callback()), - onClosing: (callback) => ipcRenderer.on('window:closing', () => callback()), // Remove listeners removeAllListeners: (channel) => ipcRenderer.removeAllListeners(channel) diff --git a/renderer/renderer.js b/renderer/renderer.js index 1e4b010..0a86d10 100644 --- a/renderer/renderer.js +++ b/renderer/renderer.js @@ -120,13 +120,15 @@ // ===== Markdown Rendering ===== function renderMarkdown(text) { if (typeof marked === 'undefined') { - preview.innerHTML = '

错误: Markdown 解析库未加载

'; + preview.textContent = '错误: Markdown 解析库未加载'; + preview.style.color = 'red'; return; } try { preview.innerHTML = marked.parse(text); } catch (e) { - preview.innerHTML = '

渲染错误: ' + e.message + '

'; + preview.textContent = '渲染错误: ' + e.message; + preview.style.color = 'red'; } } @@ -468,7 +470,7 @@ a.href = URL.createObjectURL(blob); a.download = tab.filePath || 'untitled.md'; a.click(); - URL.revokeObjectURL(a.href); + setTimeout(() => URL.revokeObjectURL(a.href), 1000); tab.isModified = false; renderTabBar(); updateTitle(); @@ -739,7 +741,6 @@ if (typeof window.electronAPI !== 'undefined') { // Remove old listeners first to prevent stacking window.electronAPI.removeAllListeners('file:openInTab'); - window.electronAPI.removeAllListeners('file:opened'); window.electronAPI.removeAllListeners('menu:save'); window.electronAPI.removeAllListeners('menu:saveAs'); window.electronAPI.removeAllListeners('menu:viewMode'); @@ -749,11 +750,6 @@ createNewTab(data.filePath, data.content); }); - // Legacy: file opened via old dialog - window.electronAPI.onFileOpened((data) => { - createNewTab(data.filePath, data.content); - }); - window.electronAPI.onMenuSave(() => handleSave()); window.electronAPI.onMenuSaveAs(() => handleSaveAs()); window.electronAPI.onViewModeChange((mode) => setViewMode(mode));