fix: 清理死代码、错误渲染防XSS、blob URL释放时机修复
This commit is contained in:
@@ -22,13 +22,11 @@ contextBridge.exposeInMainWorld('electronAPI', {
|
|||||||
|
|
||||||
// Events from main process
|
// Events from main process
|
||||||
onFileOpenInTab: (callback) => ipcRenderer.on('file:openInTab', (event, data) => callback(data)),
|
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()),
|
onMenuSave: (callback) => ipcRenderer.on('menu:save', () => callback()),
|
||||||
onMenuSaveAs: (callback) => ipcRenderer.on('menu:saveAs', () => callback()),
|
onMenuSaveAs: (callback) => ipcRenderer.on('menu:saveAs', () => callback()),
|
||||||
onViewModeChange: (callback) => ipcRenderer.on('menu:viewMode', (event, mode) => callback(mode)),
|
onViewModeChange: (callback) => ipcRenderer.on('menu:viewMode', (event, mode) => callback(mode)),
|
||||||
onExternalModification: (callback) => ipcRenderer.on('file:externallyModified', (event, filePath) => callback(filePath)),
|
onExternalModification: (callback) => ipcRenderer.on('file:externallyModified', (event, filePath) => callback(filePath)),
|
||||||
onConfirmClose: (callback) => ipcRenderer.on('window:confirmClose', () => callback()),
|
onConfirmClose: (callback) => ipcRenderer.on('window:confirmClose', () => callback()),
|
||||||
onClosing: (callback) => ipcRenderer.on('window:closing', () => callback()),
|
|
||||||
|
|
||||||
// Remove listeners
|
// Remove listeners
|
||||||
removeAllListeners: (channel) => ipcRenderer.removeAllListeners(channel)
|
removeAllListeners: (channel) => ipcRenderer.removeAllListeners(channel)
|
||||||
|
|||||||
@@ -120,13 +120,15 @@
|
|||||||
// ===== Markdown Rendering =====
|
// ===== Markdown Rendering =====
|
||||||
function renderMarkdown(text) {
|
function renderMarkdown(text) {
|
||||||
if (typeof marked === 'undefined') {
|
if (typeof marked === 'undefined') {
|
||||||
preview.innerHTML = '<p style="color: red;">错误: Markdown 解析库未加载</p>';
|
preview.textContent = '错误: Markdown 解析库未加载';
|
||||||
|
preview.style.color = 'red';
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
preview.innerHTML = marked.parse(text);
|
preview.innerHTML = marked.parse(text);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
preview.innerHTML = '<p style="color: red;">渲染错误: ' + e.message + '</p>';
|
preview.textContent = '渲染错误: ' + e.message;
|
||||||
|
preview.style.color = 'red';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -468,7 +470,7 @@
|
|||||||
a.href = URL.createObjectURL(blob);
|
a.href = URL.createObjectURL(blob);
|
||||||
a.download = tab.filePath || 'untitled.md';
|
a.download = tab.filePath || 'untitled.md';
|
||||||
a.click();
|
a.click();
|
||||||
URL.revokeObjectURL(a.href);
|
setTimeout(() => URL.revokeObjectURL(a.href), 1000);
|
||||||
tab.isModified = false;
|
tab.isModified = false;
|
||||||
renderTabBar();
|
renderTabBar();
|
||||||
updateTitle();
|
updateTitle();
|
||||||
@@ -739,7 +741,6 @@
|
|||||||
if (typeof window.electronAPI !== 'undefined') {
|
if (typeof window.electronAPI !== 'undefined') {
|
||||||
// Remove old listeners first to prevent stacking
|
// Remove old listeners first to prevent stacking
|
||||||
window.electronAPI.removeAllListeners('file:openInTab');
|
window.electronAPI.removeAllListeners('file:openInTab');
|
||||||
window.electronAPI.removeAllListeners('file:opened');
|
|
||||||
window.electronAPI.removeAllListeners('menu:save');
|
window.electronAPI.removeAllListeners('menu:save');
|
||||||
window.electronAPI.removeAllListeners('menu:saveAs');
|
window.electronAPI.removeAllListeners('menu:saveAs');
|
||||||
window.electronAPI.removeAllListeners('menu:viewMode');
|
window.electronAPI.removeAllListeners('menu:viewMode');
|
||||||
@@ -749,11 +750,6 @@
|
|||||||
createNewTab(data.filePath, data.content);
|
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.onMenuSave(() => handleSave());
|
||||||
window.electronAPI.onMenuSaveAs(() => handleSaveAs());
|
window.electronAPI.onMenuSaveAs(() => handleSaveAs());
|
||||||
window.electronAPI.onViewModeChange((mode) => setViewMode(mode));
|
window.electronAPI.onViewModeChange((mode) => setViewMode(mode));
|
||||||
|
|||||||
Reference in New Issue
Block a user