119 lines
3.5 KiB
TypeScript
119 lines
3.5 KiB
TypeScript
/**
|
||
* Electron IPC Renderer 类型定义
|
||
*/
|
||
|
||
interface IpcRenderer {
|
||
/**
|
||
* 发送异步消息(invoke/handle 模型)
|
||
* @param channel 通道名称
|
||
* @param param 传递的参数
|
||
* @returns Promise<T> 返回结果
|
||
*/
|
||
invoke<T = any>(channel: string, param?: any): Promise<T>;
|
||
|
||
/**
|
||
* 发送同步消息(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 页面上的 <webview> 元素
|
||
* @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 页面上的 <webview> 元素
|
||
*/
|
||
|
||
/**
|
||
* ipc
|
||
*/
|
||
const ipc: IpcRenderer | undefined = Renderer.ipcRenderer;
|
||
|
||
/**
|
||
* 是否为EE环境
|
||
*/
|
||
const isEE: boolean = ipc ? true : false;
|
||
|
||
export {
|
||
type IpcRenderer,
|
||
type Electron,
|
||
Renderer,
|
||
ipc,
|
||
isEE
|
||
}; |