preload.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. // 使用 require 避免 ESM 问题
  2. const { contextBridge, ipcRenderer } = require('electron');
  3. // 暴露给渲染进程的 API
  4. contextBridge.exposeInMainWorld('electronAPI', {
  5. // 应用信息
  6. getAppVersion: () => ipcRenderer.invoke('get-app-version'),
  7. getPlatform: () => ipcRenderer.invoke('get-platform'),
  8. // 窗口控制
  9. minimizeWindow: () => ipcRenderer.send('window-minimize'),
  10. maximizeWindow: () => ipcRenderer.send('window-maximize'),
  11. closeWindow: () => ipcRenderer.send('window-close'),
  12. // 文件操作
  13. selectFile: (options?: { filters?: { name: string; extensions: string[] }[] }) =>
  14. ipcRenderer.invoke('select-file', options),
  15. selectFolder: () => ipcRenderer.invoke('select-folder'),
  16. // 通知
  17. showNotification: (title: string, body: string) =>
  18. ipcRenderer.send('show-notification', { title, body }),
  19. });
  20. // 类型声明
  21. declare global {
  22. interface Window {
  23. electronAPI: {
  24. getAppVersion: () => Promise<string>;
  25. getPlatform: () => Promise<string>;
  26. minimizeWindow: () => void;
  27. maximizeWindow: () => void;
  28. closeWindow: () => void;
  29. selectFile: (options?: { filters?: { name: string; extensions: string[] }[] }) => Promise<string | null>;
  30. selectFolder: () => Promise<string | null>;
  31. showNotification: (title: string, body: string) => void;
  32. };
  33. }
  34. }