@lynker-desktop/electron-ipc 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +115 -0
- package/common/index.d.ts +41 -0
- package/common/index.d.ts.map +1 -0
- package/esm/common/index.d.ts +41 -0
- package/esm/common/index.d.ts.map +1 -0
- package/esm/index.d.ts +2 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +5 -0
- package/esm/index.js.map +1 -0
- package/esm/main/index.d.ts +60 -0
- package/esm/main/index.d.ts.map +1 -0
- package/esm/main/index.js +171 -0
- package/esm/main/index.js.map +1 -0
- package/esm/package.json +1 -0
- package/esm/preload/index.js +22 -0
- package/esm/preload/index.js.map +1 -0
- package/esm/renderer/index.d.ts +62 -0
- package/esm/renderer/index.d.ts.map +1 -0
- package/esm/renderer/index.js +123 -0
- package/esm/renderer/index.js.map +1 -0
- package/index.d.ts +2 -0
- package/index.d.ts.map +1 -0
- package/index.js +5 -0
- package/index.js.map +1 -0
- package/main/index.d.ts +60 -0
- package/main/index.d.ts.map +1 -0
- package/main/index.js +172 -0
- package/main/index.js.map +1 -0
- package/package.json +76 -0
- package/preload/index.js +22 -0
- package/preload/index.js.map +1 -0
- package/renderer/index.d.ts +62 -0
- package/renderer/index.d.ts.map +1 -0
- package/renderer/index.js +124 -0
- package/renderer/index.js.map +1 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
const getIpc = () => {
|
|
2
|
+
try {
|
|
3
|
+
// @ts-ignore
|
|
4
|
+
return window.__ELECTRON_IPC__ || window?.require('electron').ipcRenderer;
|
|
5
|
+
}
|
|
6
|
+
catch (error) {
|
|
7
|
+
console.error('getIpc error: ', error);
|
|
8
|
+
return {};
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
class RendererIPC {
|
|
12
|
+
/**
|
|
13
|
+
* 发送一次性给主进程消息
|
|
14
|
+
* @param channel
|
|
15
|
+
* @param args
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
static invokeMainOnce(channel, ...args) {
|
|
19
|
+
return new Promise(resolve => {
|
|
20
|
+
getIpc().once(`${channel}-reply`, (_event, result) => {
|
|
21
|
+
resolve(result);
|
|
22
|
+
});
|
|
23
|
+
getIpc().send(channel, ...args);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 发送给主进程消息
|
|
28
|
+
* @param channel
|
|
29
|
+
* @param args
|
|
30
|
+
* @returns
|
|
31
|
+
*/
|
|
32
|
+
static async invokeMain(channel, ...args) {
|
|
33
|
+
return await getIpc().invoke(channel, ...args);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 处理一次性主进程发送过来的消息
|
|
37
|
+
* @param channel
|
|
38
|
+
* @param handler
|
|
39
|
+
*/
|
|
40
|
+
static handleMainOnce(channel, handler) {
|
|
41
|
+
getIpc().once(channel, async (_event, ...args) => {
|
|
42
|
+
const result = await handler(...args);
|
|
43
|
+
getIpc().send(`${channel}-reply`, result);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 处理主进程发送过来的消息
|
|
48
|
+
* @param channel
|
|
49
|
+
* @param handler
|
|
50
|
+
*/
|
|
51
|
+
static handleMain(channel, handler) {
|
|
52
|
+
getIpc().on(channel, async (_event, ...args) => {
|
|
53
|
+
const result = await handler(...args);
|
|
54
|
+
getIpc().send(`${channel}-reply`, result);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 发送给渲染进程消息
|
|
59
|
+
* @param channel
|
|
60
|
+
* @param args
|
|
61
|
+
* @returns
|
|
62
|
+
*/
|
|
63
|
+
static invokeRenderer(channel, ...args) {
|
|
64
|
+
return new Promise(resolve => {
|
|
65
|
+
getIpc().once(`${channel}-reply`, (_event, result) => {
|
|
66
|
+
resolve(result);
|
|
67
|
+
});
|
|
68
|
+
getIpc().send('relay-message', { channel, args });
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 发送给指定渲染进程消息
|
|
73
|
+
* @param targetWindowId
|
|
74
|
+
* @param channel
|
|
75
|
+
* @param args
|
|
76
|
+
* @returns
|
|
77
|
+
*/
|
|
78
|
+
static invokeRendererByWinId(targetWindowId, channel, ...args) {
|
|
79
|
+
return new Promise(resolve => {
|
|
80
|
+
getIpc().once(`${channel}-reply`, (_event, result) => {
|
|
81
|
+
resolve(result);
|
|
82
|
+
});
|
|
83
|
+
getIpc().send('relay-message', { targetWindowId, channel, args });
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* 处理一次性渲染进程发送过来的消息
|
|
88
|
+
* @param channel
|
|
89
|
+
* @param handler
|
|
90
|
+
*/
|
|
91
|
+
static handleRendererOnce(channel, handler) {
|
|
92
|
+
getIpc().once(channel, async (_event, ...args) => {
|
|
93
|
+
const result = await handler(...args);
|
|
94
|
+
getIpc().send('relay-reply', { originalChannel: channel, result });
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* 处理渲染进程发送过来的消息
|
|
99
|
+
* @param channel
|
|
100
|
+
* @param handler
|
|
101
|
+
*/
|
|
102
|
+
static handleRenderer(channel, handler) {
|
|
103
|
+
getIpc().on(channel, async (_event, ...args) => {
|
|
104
|
+
const result = await handler(...args);
|
|
105
|
+
getIpc().send('relay-reply', { originalChannel: channel, result });
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* 获取当前渲染进程id
|
|
110
|
+
*/
|
|
111
|
+
static async getCurrentWebContentId() {
|
|
112
|
+
return new Promise(resolve => {
|
|
113
|
+
const channel = `__GetCurrentWebContentId__`;
|
|
114
|
+
getIpc().once(`${channel}-reply`, (_event, result) => {
|
|
115
|
+
resolve(result);
|
|
116
|
+
});
|
|
117
|
+
getIpc().send(channel);
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export { RendererIPC, getIpc };
|
|
123
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/renderer/index.ts"],"sourcesContent":["import type { IpcRenderer, IpcRendererEvent } from 'electron'\nexport const getIpc = (): IpcRenderer => {\n try {\n // @ts-ignore\n return window.__ELECTRON_IPC__ || window?.require('electron').ipcRenderer\n } catch (error) {\n console.error('getIpc error: ', error)\n return {} as IpcRenderer;\n }\n}\n\nexport class RendererIPC {\n /**\n * 发送一次性给主进程消息\n * @param channel\n * @param args\n * @returns\n */\n\tstatic invokeMainOnce(channel: string, ...args: any[]): Promise<any> {\n\t\treturn new Promise(resolve => {\n\t\t\tgetIpc().once(`${channel}-reply`, (_event: IpcRendererEvent, result: any) => {\n\t\t\t\tresolve(result)\n\t\t\t})\n\t\t\tgetIpc().send(channel, ...args)\n\t\t})\n\t}\n /**\n * 发送给主进程消息\n * @param channel\n * @param args\n * @returns\n */\n\tstatic async invokeMain(channel: string, ...args: any[]): Promise<any> {\n\t\treturn await getIpc().invoke(channel, ...args)\n\t}\n /**\n * 处理一次性主进程发送过来的消息\n * @param channel\n * @param handler\n */\n\tstatic handleMainOnce(channel: string, handler: (...args: any[]) => Promise<any>) {\n\t\tgetIpc().once(channel, async (_event: IpcRendererEvent, ...args: any[]) => {\n\t\t\tconst result = await handler(...args)\n\t\t\tgetIpc().send(`${channel}-reply`, result)\n\t\t})\n\t}\n /**\n * 处理主进程发送过来的消息\n * @param channel\n * @param handler\n */\n\tstatic handleMain(channel: string, handler: (...args: any[]) => Promise<any>) {\n\t\tgetIpc().on(channel, async (_event: IpcRendererEvent, ...args: any[]) => {\n\t\t\tconst result = await handler(...args)\n\t\t\tgetIpc().send(`${channel}-reply`, result)\n\t\t})\n\t}\n /**\n * 发送给渲染进程消息\n * @param channel\n * @param args\n * @returns\n */\n\tstatic invokeRenderer(channel: string, ...args: any[]): Promise<any> {\n\t\treturn new Promise(resolve => {\n\t\t\tgetIpc().once(`${channel}-reply`, (_event: IpcRendererEvent, result: any) => {\n\t\t\t\tresolve(result)\n\t\t\t})\n\t\t\tgetIpc().send('relay-message', { channel, args })\n\t\t})\n\t}\n\n /**\n * 发送给指定渲染进程消息\n * @param targetWindowId\n * @param channel\n * @param args\n * @returns\n */\n\tstatic invokeRendererByWinId(targetWindowId: number, channel: string, ...args: any[]): Promise<any> {\n\t\treturn new Promise(resolve => {\n\t\t\tgetIpc().once(`${channel}-reply`, (_event: IpcRendererEvent, result: any) => {\n\t\t\t\tresolve(result)\n\t\t\t})\n\t\t\tgetIpc().send('relay-message', { targetWindowId, channel, args })\n\t\t})\n\t}\n\n /**\n * 处理一次性渲染进程发送过来的消息\n * @param channel\n * @param handler\n */\n\tstatic handleRendererOnce(channel: string, handler: (...args: any[]) => Promise<any>) {\n\t\tgetIpc().once(channel, async (_event: IpcRendererEvent, ...args: any[]) => {\n\t\t\tconst result = await handler(...args)\n\t\t\tgetIpc().send('relay-reply', { originalChannel: channel, result })\n\t\t})\n\t}\n\n /**\n * 处理渲染进程发送过来的消息\n * @param channel\n * @param handler\n */\n\tstatic handleRenderer(channel: string, handler: (...args: any[]) => Promise<any>) {\n\t\tgetIpc().on(channel, async (_event: IpcRendererEvent, ...args: any[]) => {\n\t\t\tconst result = await handler(...args)\n\t\t\tgetIpc().send('relay-reply', { originalChannel: channel, result })\n\t\t})\n\t}\n\n /**\n * 获取当前渲染进程id\n */\n static async getCurrentWebContentId(): Promise<number> {\n return new Promise(resolve => {\n const channel = `__GetCurrentWebContentId__`\n\t\t\tgetIpc().once(`${channel}-reply`, (_event: IpcRendererEvent, result: any) => {\n\t\t\t\tresolve(result)\n\t\t\t})\n\t\t\tgetIpc().send(channel)\n\t\t})\n }\n}\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
package/index.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC"}
|
package/index.js
ADDED
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["src/src/index.ts"],"sourcesContent":["throw new Error(`electron 对主进程和渲染进程使用不同的代码: \n在electron主进程中, 你应该导入“@lynker-desktop/electron-ipc/main” \n在electron渲染过程中, 你应该导入“@lynker-desktop/electron-ipc/renderer”\n`);\n\nexport {};"],"names":[],"mappings":"AAAA,MAAM,IAAI,KAAK,CAAC,CAAA;;;AAGf,CAAA,CAAC;;"}
|
package/main/index.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export declare let isInitialized: boolean;
|
|
2
|
+
declare class MainIPC {
|
|
3
|
+
static instance: MainIPC;
|
|
4
|
+
private eventEmitter;
|
|
5
|
+
constructor();
|
|
6
|
+
/**
|
|
7
|
+
* 发送给主进程消息
|
|
8
|
+
* @param channel
|
|
9
|
+
* @param args
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
invokeMain(channel: string, ...args: any[]): Promise<unknown>;
|
|
13
|
+
/**
|
|
14
|
+
* 处理一次性主进程发送过来的消息
|
|
15
|
+
* @param channel
|
|
16
|
+
* @param handler
|
|
17
|
+
*/
|
|
18
|
+
handleMainOnce(channel: string, handler: (...args: any[]) => Promise<any>): void;
|
|
19
|
+
/**
|
|
20
|
+
* 处理主进程发送过来的消息
|
|
21
|
+
* @param channel
|
|
22
|
+
* @param handler
|
|
23
|
+
*/
|
|
24
|
+
handleMain(channel: string, handler: (...args: any[]) => Promise<any>): void;
|
|
25
|
+
/**
|
|
26
|
+
* 发送给渲染进程消息
|
|
27
|
+
* @param webContents
|
|
28
|
+
* @param channel
|
|
29
|
+
* @param args
|
|
30
|
+
* @returns
|
|
31
|
+
*/
|
|
32
|
+
invokeRenderer(webContents: Electron.WebContents, channel: string, ...args: any[]): Promise<any>;
|
|
33
|
+
/**
|
|
34
|
+
* 发送给所有渲染进程消息
|
|
35
|
+
* @param channel
|
|
36
|
+
* @param args
|
|
37
|
+
* @returns
|
|
38
|
+
*/
|
|
39
|
+
invokeAllRenderer(channel: string, ...args: any[]): Promise<any>;
|
|
40
|
+
/**
|
|
41
|
+
* 处理一次性渲染进程发送过来的消息
|
|
42
|
+
* @param channel
|
|
43
|
+
* @param handler
|
|
44
|
+
*/
|
|
45
|
+
handleRendererOnce(channel: string, handler: (...args: any[]) => Promise<any>): void;
|
|
46
|
+
/**
|
|
47
|
+
* 处理渲染进程发送过来的消息
|
|
48
|
+
* @param channel
|
|
49
|
+
* @param handler
|
|
50
|
+
*/
|
|
51
|
+
handleRenderer(channel: string, handler: (...args: any[]) => Promise<any>): void;
|
|
52
|
+
/**
|
|
53
|
+
* 初始化
|
|
54
|
+
*/
|
|
55
|
+
relayMessage(): void;
|
|
56
|
+
}
|
|
57
|
+
export declare const mainIPC: MainIPC;
|
|
58
|
+
export declare const initialize: () => void;
|
|
59
|
+
export {};
|
|
60
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/main/index.ts"],"names":[],"mappings":"AAIA,eAAO,IAAI,aAAa,SAAQ,CAAC;AACjC,cAAM,OAAO;IACZ,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAA;IACxB,OAAO,CAAC,YAAY,CAAmC;;IAUtD;;;;;OAKG;IACE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAS/C;;;;OAIG;IACJ,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAOxE;;;;OAIG;IACJ,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAOpE;;;;;;OAMG;IACJ,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAoB/F;;;;;OAKG;IACJ,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAqB/D;;;;OAIG;IACJ,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAM5E;;;;OAIG;IACJ,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAKxE;;OAEG;IACJ,YAAY;CAoCZ;AAED,eAAO,MAAM,OAAO,SAAgB,CAAA;AAEpC,eAAO,MAAM,UAAU,YAKtB,CAAA"}
|
package/main/index.js
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
const events = require('events');
|
|
2
|
+
const electron = require('electron');
|
|
3
|
+
|
|
4
|
+
exports.isInitialized = false;
|
|
5
|
+
class MainIPC {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.eventEmitter = new events.EventEmitter();
|
|
8
|
+
if (!MainIPC.instance) {
|
|
9
|
+
this.eventEmitter = new events.EventEmitter();
|
|
10
|
+
MainIPC.instance = this;
|
|
11
|
+
}
|
|
12
|
+
return MainIPC.instance;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 发送给主进程消息
|
|
16
|
+
* @param channel
|
|
17
|
+
* @param args
|
|
18
|
+
* @returns
|
|
19
|
+
*/
|
|
20
|
+
async invokeMain(channel, ...args) {
|
|
21
|
+
return new Promise(resolve => {
|
|
22
|
+
this.eventEmitter.once(`${channel}-reply`, result => {
|
|
23
|
+
resolve(result);
|
|
24
|
+
});
|
|
25
|
+
this.eventEmitter.emit(channel, ...args);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 处理一次性主进程发送过来的消息
|
|
30
|
+
* @param channel
|
|
31
|
+
* @param handler
|
|
32
|
+
*/
|
|
33
|
+
handleMainOnce(channel, handler) {
|
|
34
|
+
this.eventEmitter.once(channel, async (...args) => {
|
|
35
|
+
const result = await handler(...args);
|
|
36
|
+
this.eventEmitter.emit(`${channel}-reply`, result);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 处理主进程发送过来的消息
|
|
41
|
+
* @param channel
|
|
42
|
+
* @param handler
|
|
43
|
+
*/
|
|
44
|
+
handleMain(channel, handler) {
|
|
45
|
+
this.eventEmitter.on(channel, async (...args) => {
|
|
46
|
+
const result = await handler(...args);
|
|
47
|
+
this.eventEmitter.emit(`${channel}-reply`, result);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 发送给渲染进程消息
|
|
52
|
+
* @param webContents
|
|
53
|
+
* @param channel
|
|
54
|
+
* @param args
|
|
55
|
+
* @returns
|
|
56
|
+
*/
|
|
57
|
+
invokeRenderer(webContents, channel, ...args) {
|
|
58
|
+
return new Promise(resolve => {
|
|
59
|
+
const sendMessage = () => {
|
|
60
|
+
electron.ipcMain.once(`${channel}-reply`, (_event, result) => {
|
|
61
|
+
resolve(result);
|
|
62
|
+
});
|
|
63
|
+
webContents.send(channel, ...args);
|
|
64
|
+
};
|
|
65
|
+
// 等待渲染进程加载完成后再推送,否则会导致渲染进程收不到消息
|
|
66
|
+
if (webContents.isLoading()) {
|
|
67
|
+
webContents.once('did-finish-load', () => {
|
|
68
|
+
setTimeout(() => sendMessage());
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
sendMessage();
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 发送给所有渲染进程消息
|
|
78
|
+
* @param channel
|
|
79
|
+
* @param args
|
|
80
|
+
* @returns
|
|
81
|
+
*/
|
|
82
|
+
invokeAllRenderer(channel, ...args) {
|
|
83
|
+
return new Promise(resolve => {
|
|
84
|
+
electron.webContents.getAllWebContents().forEach(webContent => {
|
|
85
|
+
const sendMessage = () => {
|
|
86
|
+
electron.ipcMain.once(`${channel}-reply`, (_event, result) => {
|
|
87
|
+
resolve(result);
|
|
88
|
+
});
|
|
89
|
+
webContent.send(channel, ...args);
|
|
90
|
+
};
|
|
91
|
+
// 等待渲染进程加载完成后再推送,否则会导致渲染进程收不到消息
|
|
92
|
+
if (webContent.isLoading()) {
|
|
93
|
+
webContent.once('did-finish-load', () => {
|
|
94
|
+
setTimeout(() => sendMessage());
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
sendMessage();
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* 处理一次性渲染进程发送过来的消息
|
|
105
|
+
* @param channel
|
|
106
|
+
* @param handler
|
|
107
|
+
*/
|
|
108
|
+
handleRendererOnce(channel, handler) {
|
|
109
|
+
electron.ipcMain.once(channel, async (_event, ...args) => {
|
|
110
|
+
const result = await handler(...args);
|
|
111
|
+
_event.sender.send(`${channel}-reply`, result);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 处理渲染进程发送过来的消息
|
|
116
|
+
* @param channel
|
|
117
|
+
* @param handler
|
|
118
|
+
*/
|
|
119
|
+
handleRenderer(channel, handler) {
|
|
120
|
+
electron.ipcMain.handle(channel, async (_event, ...args) => {
|
|
121
|
+
return await handler(...args);
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* 初始化
|
|
126
|
+
*/
|
|
127
|
+
relayMessage() {
|
|
128
|
+
electron.ipcMain.on('relay-message', (_event, { targetWindowId, channel, args }) => {
|
|
129
|
+
if (targetWindowId) {
|
|
130
|
+
const targetWindow = electron.BrowserWindow.fromId(targetWindowId);
|
|
131
|
+
if (targetWindow) {
|
|
132
|
+
targetWindow.webContents.send(channel, ...args);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
electron.BrowserWindow.getAllWindows().forEach(window => {
|
|
137
|
+
window.webContents.send(channel, ...args);
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
electron.ipcMain.on('relay-reply', (_event, { originalChannel, result }) => {
|
|
142
|
+
// 所有渲染进程都会接收 ${originalChannel}-reply 事件,要求仅需要的渲染进程处理该事件的回复。
|
|
143
|
+
// 这样可以避免需要指定窗口 ID 回复消息,并确保消息能够正确传递和接收
|
|
144
|
+
electron.BrowserWindow.getAllWindows().forEach(window => {
|
|
145
|
+
window.webContents.send(`${originalChannel}-reply`, result);
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
const getCurrentWebContentIdChannel = '__GetCurrentWebContentId__';
|
|
149
|
+
electron.ipcMain.on(getCurrentWebContentIdChannel, (_event) => {
|
|
150
|
+
try {
|
|
151
|
+
_event.frameId;
|
|
152
|
+
const webContentId = _event?.sender?.id;
|
|
153
|
+
_event.sender.send(`${getCurrentWebContentIdChannel}-reply`, webContentId);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
console.error('xxxxx');
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
const mainIPC = new MainIPC();
|
|
163
|
+
const initialize = () => {
|
|
164
|
+
if (!exports.isInitialized) {
|
|
165
|
+
exports.isInitialized = true;
|
|
166
|
+
mainIPC.relayMessage();
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
exports.initialize = initialize;
|
|
171
|
+
exports.mainIPC = mainIPC;
|
|
172
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/src/main/index.ts"],"sourcesContent":["import { EventEmitter } from 'events'\n\nimport { ipcMain, BrowserWindow, webContents } from 'electron'\n\nexport let isInitialized = false;\nclass MainIPC {\n\tstatic instance: MainIPC\n\tprivate eventEmitter: EventEmitter = new EventEmitter()\n\n\tconstructor() {\n\t\tif (!MainIPC.instance) {\n\t\t\tthis.eventEmitter = new EventEmitter()\n\t\t\tMainIPC.instance = this\n\t\t}\n\t\treturn MainIPC.instance\n\t}\n\n /**\n * 发送给主进程消息\n * @param channel\n * @param args\n * @returns\n */\n\tasync invokeMain(channel: string, ...args: any[]) {\n\t\treturn new Promise(resolve => {\n\t\t\tthis.eventEmitter.once(`${channel}-reply`, result => {\n\t\t\t\tresolve(result)\n\t\t\t})\n\t\t\tthis.eventEmitter.emit(channel, ...args)\n\t\t})\n\t}\n\n /**\n * 处理一次性主进程发送过来的消息\n * @param channel\n * @param handler\n */\n\thandleMainOnce(channel: string, handler: (...args: any[]) => Promise<any>) {\n\t\tthis.eventEmitter.once(channel, async (...args) => {\n\t\t\tconst result = await handler(...args)\n\t\t\tthis.eventEmitter.emit(`${channel}-reply`, result)\n\t\t})\n\t}\n\n /**\n * 处理主进程发送过来的消息\n * @param channel\n * @param handler\n */\n\thandleMain(channel: string, handler: (...args: any[]) => Promise<any>) {\n\t\tthis.eventEmitter.on(channel, async (...args) => {\n\t\t\tconst result = await handler(...args)\n\t\t\tthis.eventEmitter.emit(`${channel}-reply`, result)\n\t\t})\n\t}\n\n /**\n * 发送给渲染进程消息\n * @param webContents\n * @param channel\n * @param args\n * @returns\n */\n\tinvokeRenderer(webContents: Electron.WebContents, channel: string, ...args: any[]): Promise<any> {\n\t\treturn new Promise(resolve => {\n\t\t\tconst sendMessage = () => {\n\t\t\t\tipcMain.once(`${channel}-reply`, (_event, result) => {\n\t\t\t\t\tresolve(result)\n\t\t\t\t})\n\t\t\t\twebContents.send(channel, ...args)\n\t\t\t}\n\n\t\t\t// 等待渲染进程加载完成后再推送,否则会导致渲染进程收不到消息\n\t\t\tif (webContents.isLoading()) {\n\t\t\t\twebContents.once('did-finish-load', () => {\n\t\t\t\t\tsetTimeout(() => sendMessage())\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tsendMessage()\n\t\t\t}\n\t\t})\n\t}\n\n /**\n * 发送给所有渲染进程消息\n * @param channel\n * @param args\n * @returns\n */\n\tinvokeAllRenderer(channel: string, ...args: any[]): Promise<any> {\n\t\treturn new Promise(resolve => {\n\t\t\twebContents.getAllWebContents().forEach(webContent => {\n\t\t\t\tconst sendMessage = () => {\n\t\t\t\t\tipcMain.once(`${channel}-reply`, (_event, result) => {\n\t\t\t\t\t\tresolve(result)\n\t\t\t\t\t})\n\t\t\t\t\twebContent.send(channel, ...args)\n\t\t\t\t}\n\n\t\t\t\t// 等待渲染进程加载完成后再推送,否则会导致渲染进程收不到消息\n\t\t\t\tif (webContent.isLoading()) {\n\t\t\t\t\twebContent.once('did-finish-load', () => {\n\t\t\t\t\t\tsetTimeout(() => sendMessage())\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tsendMessage()\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t}\n /**\n * 处理一次性渲染进程发送过来的消息\n * @param channel\n * @param handler\n */\n\thandleRendererOnce(channel: string, handler: (...args: any[]) => Promise<any>) {\n\t\tipcMain.once(channel, async (_event, ...args: any[]) => {\n\t\t\tconst result = await handler(...args)\n\t\t\t_event.sender.send(`${channel}-reply`, result)\n\t\t})\n\t}\n /**\n * 处理渲染进程发送过来的消息\n * @param channel\n * @param handler\n */\n\thandleRenderer(channel: string, handler: (...args: any[]) => Promise<any>) {\n\t\tipcMain.handle(channel, async (_event, ...args: any[]) => {\n\t\t\treturn await handler(...args)\n\t\t})\n\t}\n /**\n * 初始化\n */\n\trelayMessage() {\n\t\tipcMain.on('relay-message', (_event, { targetWindowId, channel, args }) => {\n\t\t\tif (targetWindowId) {\n\t\t\t\tconst targetWindow = BrowserWindow.fromId(targetWindowId)\n\t\t\t\tif (targetWindow) {\n\t\t\t\t\ttargetWindow.webContents.send(channel, ...args)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tBrowserWindow.getAllWindows().forEach(window => {\n\t\t\t\t\twindow.webContents.send(channel, ...args)\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\n\t\tipcMain.on('relay-reply', (_event, { originalChannel, result }) => {\n\t\t\t// 所有渲染进程都会接收 ${originalChannel}-reply 事件,要求仅需要的渲染进程处理该事件的回复。\n\t\t\t// 这样可以避免需要指定窗口 ID 回复消息,并确保消息能够正确传递和接收\n\t\t\tBrowserWindow.getAllWindows().forEach(window => {\n\t\t\t\twindow.webContents.send(`${originalChannel}-reply`, result)\n\t\t\t})\n\t\t})\n\n const getCurrentWebContentIdChannel = '__GetCurrentWebContentId__'\n ipcMain.on(getCurrentWebContentIdChannel, (_event) => {\n try {\n _event.frameId\n const webContentId = _event?.sender?.id;\n _event.sender.send(`${getCurrentWebContentIdChannel}-reply`, webContentId)\n } catch (error) {\n return undefined\n }\n\t\t})\n\n console.error('xxxxx')\n\t}\n\n}\n\nexport const mainIPC = new MainIPC()\n\nexport const initialize = () => {\n if (!isInitialized){\n isInitialized = true;\n\t\tmainIPC.relayMessage()\n }\n}\n"],"names":["isInitialized","EventEmitter","ipcMain","webContents","BrowserWindow"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lynker-desktop/electron-ipc",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "electron-ipc",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"electron",
|
|
7
|
+
"browser",
|
|
8
|
+
"tab"
|
|
9
|
+
],
|
|
10
|
+
"types": "./index.d.ts",
|
|
11
|
+
"main": "./index.js",
|
|
12
|
+
"module": "./esm/main/index.js",
|
|
13
|
+
"browser": "./esm/renderer/index.js",
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"node": {
|
|
17
|
+
"require": "./index.js",
|
|
18
|
+
"import": "./esm/main/index.js"
|
|
19
|
+
},
|
|
20
|
+
"default": "./esm/renderer/index.js"
|
|
21
|
+
},
|
|
22
|
+
"./main": {
|
|
23
|
+
"require": "./main/index.js",
|
|
24
|
+
"import": "./esm/main/index.js"
|
|
25
|
+
},
|
|
26
|
+
"./renderer": {
|
|
27
|
+
"require": "./renderer/index.js",
|
|
28
|
+
"import": "./esm/renderer/index.js"
|
|
29
|
+
},
|
|
30
|
+
"./preload": {
|
|
31
|
+
"require": "./preload/index.js",
|
|
32
|
+
"import": "./esm/preload/index.js"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"author": "",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": ""
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"npm:publish": "pnpm publish --access public",
|
|
43
|
+
"prepublishOnly": "npm run build",
|
|
44
|
+
"build": "rollup -c --bundleConfigAsCjs ",
|
|
45
|
+
"docs": "documentation build *.js -f html -o docs",
|
|
46
|
+
"start:control": "npx babel --watch example/renderer/control.jsx --out-file example/renderer/control-compiled.js",
|
|
47
|
+
"dev": "concurrently \"npm run dev:renderer\" \"node ./scripts/dev.js\"",
|
|
48
|
+
"dev:renderer": "cd example/renderer && npm run dev",
|
|
49
|
+
"dev:main": "npm run build && electron --inspect=8888 example/main.js"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@babel/core": "^7.24.9",
|
|
53
|
+
"@rollup/plugin-babel": "^6.0.4",
|
|
54
|
+
"@rollup/plugin-commonjs": "^26.0.1",
|
|
55
|
+
"@rollup/plugin-json": "^6.1.0",
|
|
56
|
+
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
57
|
+
"@rollup/plugin-replace": "^5.0.7",
|
|
58
|
+
"@rollup/plugin-typescript": "^11.1.6",
|
|
59
|
+
"@types/lodash": "^4.17.7",
|
|
60
|
+
"classnames": "^2.2.6",
|
|
61
|
+
"concurrently": "^8.2.2",
|
|
62
|
+
"electron": "24.8.8",
|
|
63
|
+
"file-url": "^2.0.2",
|
|
64
|
+
"fs-extra": "^11.2.0",
|
|
65
|
+
"lodash.merge": "^4.6.2",
|
|
66
|
+
"react": "^16.8.6",
|
|
67
|
+
"react-dom": "^16.8.6",
|
|
68
|
+
"rimraf": "^6.0.1",
|
|
69
|
+
"rollup": "^4.18.1",
|
|
70
|
+
"rollup-obfuscator": "^4.1.1",
|
|
71
|
+
"rollup-plugin-multi-input": "^1.4.2",
|
|
72
|
+
"rollup-plugin-node-builtins": "^2.1.2",
|
|
73
|
+
"tslib": "^2.6.3",
|
|
74
|
+
"typescript": "^5.5.3"
|
|
75
|
+
}
|
|
76
|
+
}
|
package/preload/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const electron = require('electron');
|
|
2
|
+
|
|
3
|
+
// @ts-ignore
|
|
4
|
+
if (window.__ELECTRON_IPC__) {
|
|
5
|
+
// eslint-disable-next-line no-console
|
|
6
|
+
console.log('electron-ipc Electron preload has already been run');
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
// @ts-ignore
|
|
10
|
+
window.__ELECTRON_IPC__ = electron.ipcRenderer;
|
|
11
|
+
if (electron.contextBridge) {
|
|
12
|
+
// This will fail if contextIsolation is not enabled
|
|
13
|
+
try {
|
|
14
|
+
// @ts-ignore
|
|
15
|
+
electron.contextBridge.exposeInMainWorld('__ELECTRON_IPC__', electron.ipcRenderer);
|
|
16
|
+
}
|
|
17
|
+
catch (e) {
|
|
18
|
+
// console.error(e)
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/src/preload/index.ts"],"sourcesContent":["import { ipcRenderer, contextBridge } from 'electron';\n\n// @ts-ignore\nif (window.__ELECTRON_IPC__) {\n // eslint-disable-next-line no-console\n console.log('electron-ipc Electron preload has already been run');\n} else {\n // @ts-ignore\n window.__ELECTRON_IPC__ = ipcRenderer;\n if (contextBridge) {\n // This will fail if contextIsolation is not enabled\n try {\n // @ts-ignore\n contextBridge.exposeInMainWorld('__ELECTRON_IPC__', ipcRenderer);\n } catch (e) {\n // console.error(e)\n }\n }\n}\n"],"names":["ipcRenderer","contextBridge"],"mappings":";;AAEA;AACA,IAAI,MAAM,CAAC,gBAAgB,EAAE;;AAE3B,IAAA,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;AACpE,CAAC;KAAM;;AAEL,IAAA,MAAM,CAAC,gBAAgB,GAAGA,oBAAW,CAAC;IACtC,IAAIC,sBAAa,EAAE;;AAEjB,QAAA,IAAI;;AAEF,YAAAA,sBAAa,CAAC,iBAAiB,CAAC,kBAAkB,EAAED,oBAAW,CAAC,CAAC;SAClE;QAAC,OAAO,CAAC,EAAE;;SAEX;KACF;AACH;;"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { IpcRenderer } from 'electron';
|
|
2
|
+
export declare const getIpc: () => IpcRenderer;
|
|
3
|
+
export declare class RendererIPC {
|
|
4
|
+
/**
|
|
5
|
+
* 发送一次性给主进程消息
|
|
6
|
+
* @param channel
|
|
7
|
+
* @param args
|
|
8
|
+
* @returns
|
|
9
|
+
*/
|
|
10
|
+
static invokeMainOnce(channel: string, ...args: any[]): Promise<any>;
|
|
11
|
+
/**
|
|
12
|
+
* 发送给主进程消息
|
|
13
|
+
* @param channel
|
|
14
|
+
* @param args
|
|
15
|
+
* @returns
|
|
16
|
+
*/
|
|
17
|
+
static invokeMain(channel: string, ...args: any[]): Promise<any>;
|
|
18
|
+
/**
|
|
19
|
+
* 处理一次性主进程发送过来的消息
|
|
20
|
+
* @param channel
|
|
21
|
+
* @param handler
|
|
22
|
+
*/
|
|
23
|
+
static handleMainOnce(channel: string, handler: (...args: any[]) => Promise<any>): void;
|
|
24
|
+
/**
|
|
25
|
+
* 处理主进程发送过来的消息
|
|
26
|
+
* @param channel
|
|
27
|
+
* @param handler
|
|
28
|
+
*/
|
|
29
|
+
static handleMain(channel: string, handler: (...args: any[]) => Promise<any>): void;
|
|
30
|
+
/**
|
|
31
|
+
* 发送给渲染进程消息
|
|
32
|
+
* @param channel
|
|
33
|
+
* @param args
|
|
34
|
+
* @returns
|
|
35
|
+
*/
|
|
36
|
+
static invokeRenderer(channel: string, ...args: any[]): Promise<any>;
|
|
37
|
+
/**
|
|
38
|
+
* 发送给指定渲染进程消息
|
|
39
|
+
* @param targetWindowId
|
|
40
|
+
* @param channel
|
|
41
|
+
* @param args
|
|
42
|
+
* @returns
|
|
43
|
+
*/
|
|
44
|
+
static invokeRendererByWinId(targetWindowId: number, channel: string, ...args: any[]): Promise<any>;
|
|
45
|
+
/**
|
|
46
|
+
* 处理一次性渲染进程发送过来的消息
|
|
47
|
+
* @param channel
|
|
48
|
+
* @param handler
|
|
49
|
+
*/
|
|
50
|
+
static handleRendererOnce(channel: string, handler: (...args: any[]) => Promise<any>): void;
|
|
51
|
+
/**
|
|
52
|
+
* 处理渲染进程发送过来的消息
|
|
53
|
+
* @param channel
|
|
54
|
+
* @param handler
|
|
55
|
+
*/
|
|
56
|
+
static handleRenderer(channel: string, handler: (...args: any[]) => Promise<any>): void;
|
|
57
|
+
/**
|
|
58
|
+
* 获取当前渲染进程id
|
|
59
|
+
*/
|
|
60
|
+
static getCurrentWebContentId(): Promise<number>;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,UAAU,CAAA;AAC7D,eAAO,MAAM,MAAM,QAAO,WAQzB,CAAA;AAED,qBAAa,WAAW;IACtB;;;;;OAKG;IACJ,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAQnE;;;;;OAKG;WACS,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAGrE;;;;OAIG;IACJ,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAM/E;;;;OAIG;IACJ,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAM3E;;;;;OAKG;IACJ,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IASnE;;;;;;OAMG;IACJ,MAAM,CAAC,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IASlG;;;;OAIG;IACJ,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAOnF;;;;OAIG;IACJ,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAO/E;;OAEG;WACU,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;CASvD"}
|