1. 预览区无法选择复制 — #preview 添加 user-select: text 2. IPC 监听器重复注册 — 注册前先 removeAllListeners 防止堆叠 3. 关闭确认取消后 5s 超时仍强制关闭 — 新增 cancelClose IPC 清除超时 4. 预览区链接点击离开应用 — 拦截点击,通过 shell.openExternal 打开 5. 预览区链接光标样式 — .markdown-body a 添加 cursor: pointer
36 lines
1.7 KiB
JavaScript
36 lines
1.7 KiB
JavaScript
const { contextBridge, ipcRenderer, shell } = require('electron');
|
|
|
|
contextBridge.exposeInMainWorld('electronAPI', {
|
|
// File operations
|
|
openFile: () => ipcRenderer.invoke('dialog:openFile'),
|
|
readFile: (filePath) => ipcRenderer.invoke('file:read', filePath),
|
|
saveFile: (data) => ipcRenderer.invoke('file:save', data),
|
|
saveFileAs: (data) => ipcRenderer.invoke('file:saveAs', data),
|
|
getCurrentPath: () => ipcRenderer.invoke('file:getCurrentPath'),
|
|
getFileStats: (filePath) => ipcRenderer.invoke('file:stats', filePath),
|
|
reloadFile: () => ipcRenderer.invoke('file:reload'),
|
|
|
|
// Tab management
|
|
tabSwitched: (filePath) => ipcRenderer.invoke('tab:switched', filePath),
|
|
|
|
// Window control
|
|
forceClose: () => ipcRenderer.invoke('window:forceClose'),
|
|
cancelClose: () => ipcRenderer.invoke('window:cancelClose'),
|
|
|
|
// Shell
|
|
openExternal: (url) => shell.openExternal(url),
|
|
|
|
// 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)
|
|
});
|