/** * Electron IPC Renderer 类型定义 */ interface IpcRenderer { /** * 发送异步消息(invoke/handle 模型) * @param channel 通道名称 * @param param 传递的参数 * @returns Promise 返回结果 */ invoke(channel: string, param?: any): Promise; /** * 发送同步消息(send/on 模型) * @param channel 通道名称 * @param param 传递的参数 * @returns 返回结果 */ sendSync(channel: string, param?: any): any; /** * 监听 channel,当新消息到达,调用 listener * @param channel 通道名称 * @param listener 监听器函数 */ on(channel: string, listener: (event: any, ...args: any[]) => void): void; /** * 添加一次性 listener 函数 * @param channel 通道名称 * @param listener 监听器函数 */ once(channel: string, listener: (event: any, ...args: any[]) => void): void; /** * 为特定的 channel 从监听队列中删除特定的 listener 监听者 * @param channel 通道名称 * @param listener 要移除的监听器函数 */ removeListener(channel: string, listener: (event: any, ...args: any[]) => void): void; /** * 移除所有的监听器,当指定 channel 时只移除与其相关的所有监听器 * @param channel 通道名称(可选) */ removeAllListeners(channel?: string): void; /** * 通过 channel 向主进程发送异步消息 * @param channel 通道名称 * @param args 传递的参数 */ send(channel: string, ...args: any[]): void; /** * 发送消息到主进程 * @param channel 通道名称 * @param message 消息内容 * @param transfer 传输对象(可选) */ postMessage(channel: string, message: any, transfer?: MessagePort[]): void; /** * 通过 channel 发送消息到带有 webContentsId 的窗口 * @param webContentsId 目标窗口的 ID * @param channel 通道名称 * @param args 传递的参数 */ sendTo(webContentsId: number, channel: string, ...args: any[]): void; /** * 消息会被发送到 host 页面上的 元素 * @param channel 通道名称 * @param args 传递的参数 */ sendToHost(channel: string, ...args: any[]): void; } interface Electron { ipcRenderer?: IpcRenderer; } const Renderer = (window.require && window.require('electron')) || (window as any).electron || {}; /** * ipc * 官方api说明:https://www.electronjs.org/zh/docs/latest/api/ipc-renderer * * 属性/方法 * ipc.invoke(channel, param) - 发送异步消息(invoke/handle 模型) * ipc.sendSync(channel, param) - 发送同步消息(send/on 模型) * ipc.on(channel, listener) - 监听 channel, 当新消息到达,调用 listener * ipc.once(channel, listener) - 添加一次性 listener 函数 * ipc.removeListener(channel, listener) - 为特定的 channel 从监听队列中删除特定的 listener 监听者 * ipc.removeAllListeners(channel) - 移除所有的监听器,当指定 channel 时只移除与其相关的所有监听器 * ipc.send(channel, ...args) - 通过channel向主进程发送异步消息 * ipc.postMessage(channel, message, [transfer]) - 发送消息到主进程 * ipc.sendTo(webContentsId, channel, ...args) - 通过 channel 发送消息到带有 webContentsId 的窗口 * ipc.sendToHost(channel, ...args) - 消息会被发送到 host 页面上的 元素 */ /** * ipc */ const ipc: IpcRenderer | undefined = Renderer.ipcRenderer; /** * 是否为EE环境 */ const isEE: boolean = ipc ? true : false; export { type IpcRenderer, type Electron, Renderer, ipc, isEE };