@lynker-desktop/electron-window-manager 0.0.4-alpha.62 → 0.0.4-alpha.65
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/common/index.d.ts +18 -3
- package/common/index.d.ts.map +1 -1
- package/esm/common/index.d.ts +18 -3
- package/esm/common/index.d.ts.map +1 -1
- package/esm/main/index.d.ts +6 -6
- package/esm/main/index.d.ts.map +1 -1
- package/esm/main/index.js +150 -82
- package/esm/main/index.js.map +1 -1
- package/esm/renderer/index.d.ts +6 -12
- package/esm/renderer/index.d.ts.map +1 -1
- package/esm/renderer/index.js +38 -3
- package/esm/renderer/index.js.map +1 -1
- package/main/index.d.ts +6 -6
- package/main/index.d.ts.map +1 -1
- package/main/index.js +150 -82
- package/main/index.js.map +1 -1
- package/package.json +2 -2
- package/renderer/index.d.ts +6 -12
- package/renderer/index.d.ts.map +1 -1
- package/renderer/index.js +38 -3
- package/renderer/index.js.map +1 -1
package/esm/renderer/index.js
CHANGED
|
@@ -20,6 +20,20 @@ const getRemote = () => {
|
|
|
20
20
|
return {};
|
|
21
21
|
}
|
|
22
22
|
};
|
|
23
|
+
/**
|
|
24
|
+
* 一次性获取所有窗口的 BrowserView
|
|
25
|
+
*/
|
|
26
|
+
const getAllBv = () => {
|
|
27
|
+
const remote = getRemote();
|
|
28
|
+
// 一次性获取所有窗口的 BrowserView
|
|
29
|
+
const allWindows = remote.BrowserWindow.getAllWindows();
|
|
30
|
+
let allBrowserViews = [];
|
|
31
|
+
allWindows.forEach(window => {
|
|
32
|
+
const views = window.getBrowserViews();
|
|
33
|
+
allBrowserViews = allBrowserViews.concat(views);
|
|
34
|
+
});
|
|
35
|
+
return allBrowserViews;
|
|
36
|
+
};
|
|
23
37
|
/**
|
|
24
38
|
* 创建窗口
|
|
25
39
|
* @param options
|
|
@@ -28,11 +42,17 @@ const getRemote = () => {
|
|
|
28
42
|
const create = async (options) => {
|
|
29
43
|
const remote = getRemote();
|
|
30
44
|
const data = await eIpc.RendererIPC.invokeMain('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'create', data: options });
|
|
31
|
-
|
|
45
|
+
let win = remote.BrowserWindow.fromId(data.winId);
|
|
46
|
+
if (!win) {
|
|
47
|
+
const webContent = remote.webContents.fromId(data.winId);
|
|
48
|
+
win = getAllBv().find(i => i.webContents === webContent);
|
|
49
|
+
}
|
|
32
50
|
if (win) {
|
|
33
51
|
// @ts-ignore
|
|
34
52
|
win && (win['_name'] = `${data.winName}`);
|
|
35
53
|
// @ts-ignore
|
|
54
|
+
win && (win['_type'] = `${element?.winType || ''}`);
|
|
55
|
+
// @ts-ignore
|
|
36
56
|
win && (win['_extraData'] = `${data.winExtraData || ''}`);
|
|
37
57
|
}
|
|
38
58
|
return win;
|
|
@@ -53,11 +73,17 @@ const getCurrentWindow = async () => {
|
|
|
53
73
|
const get = async (idOrName) => {
|
|
54
74
|
const remote = getRemote();
|
|
55
75
|
const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'get', data: idOrName });
|
|
56
|
-
|
|
76
|
+
let win = remote.BrowserWindow.fromId(data.winId);
|
|
77
|
+
if (!win) {
|
|
78
|
+
const webContent = remote.webContents.fromId(data.winId);
|
|
79
|
+
win = getAllBv().find(i => i.webContents === webContent);
|
|
80
|
+
}
|
|
57
81
|
if (win) {
|
|
58
82
|
// @ts-ignore
|
|
59
83
|
win && (win['_name'] = `${data.winName || ''}`);
|
|
60
84
|
// @ts-ignore
|
|
85
|
+
win && (win['_type'] = `${data?.winType || ''}`);
|
|
86
|
+
// @ts-ignore
|
|
61
87
|
win && (win['_extraData'] = `${data.winExtraData || ''}`);
|
|
62
88
|
}
|
|
63
89
|
return win;
|
|
@@ -71,15 +97,24 @@ const getAll = async () => {
|
|
|
71
97
|
const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'getAll', data: undefined });
|
|
72
98
|
const wins = new Map();
|
|
73
99
|
const allW = remote.BrowserWindow.getAllWindows();
|
|
100
|
+
const allV = getAllBv();
|
|
101
|
+
console.error(getAllBv());
|
|
74
102
|
for (const key in data) {
|
|
75
103
|
const element = data[key];
|
|
76
|
-
|
|
104
|
+
let win = allW.find(i => {
|
|
77
105
|
return `${i.id}` === `${element?.winId}`;
|
|
78
106
|
});
|
|
107
|
+
if (!win) {
|
|
108
|
+
const webContent = remote.webContents.fromId(element.winId);
|
|
109
|
+
// @ts-ignore
|
|
110
|
+
win = allV.find(i => i.webContents === webContent);
|
|
111
|
+
}
|
|
79
112
|
if (win) {
|
|
80
113
|
// @ts-ignore
|
|
81
114
|
win && (win['_name'] = `${element?.winName || ''}`);
|
|
82
115
|
// @ts-ignore
|
|
116
|
+
win && (win['_type'] = `${element?.winType || ''}`);
|
|
117
|
+
// @ts-ignore
|
|
83
118
|
win && (win['_extraData'] = `${element?.winExtraData || ''}`);
|
|
84
119
|
wins.set(key, win);
|
|
85
120
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/renderer/index.ts"],"sourcesContent":["/** Used in Renderer process */\nimport type {BrowserWindow, IpcRenderer} from 'electron'\nimport { ElectronWindowsManagerOptions } from '../common';\nimport type RemoteType from '@electron/remote'\nimport eIpc from '@lynker-desktop/electron-ipc/renderer'\n\nexport interface BrowserWindowType extends BrowserWindow {\n _name: string;\n _extraData: string;\n}\n\nconst getIpc = (): IpcRenderer => {\n try {\n // @ts-ignore\n return window?.__ELECTRON_WINDOW_MANAGER__?.ipcRenderer || window?.require('electron').ipcRenderer\n } catch (error) {\n console.error('当前非桌面端环境, 请在桌面端中调用');\n return {} as IpcRenderer;\n }\n}\n\nconst getRemote = (): typeof RemoteType => {\n try {\n // @ts-ignore\n return window?.__ELECTRON_WINDOW_MANAGER__?.remote || window?.require('@electron/remote')\n } catch (error) {\n console.error('getIpc error: ', error)\n return {} as typeof RemoteType;\n }\n}\n\n/**\n * 创建窗口\n * @param options\n * @returns\n */\nexport const create = async (options: ElectronWindowsManagerOptions): Promise<BrowserWindowType> => {\n const remote = getRemote()\n const data: {winId: number; winName: string} = await eIpc.RendererIPC.invokeMain('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'create', data: options})\n const win = remote.BrowserWindow.fromId(data.winId)! as BrowserWindowType;\n if (win) {\n // @ts-ignore\n win && (win['_name'] = `${data.winName}`);\n // @ts-ignore\n win && (win['_extraData'] = `${data.winExtraData || ''}`);\n }\n return win;\n}\n\n/**\n * 获取当前窗口实例\n */\nexport const getCurrentWindow = async () => {\n const remote = getRemote();\n const winId = remote.getCurrentWindow().id;\n return get(winId);\n}\n\n/**\n * 获取窗口\n * @param idOrName id或者名字\n * @returns\n */\nexport const get = async (idOrName: string | number): Promise<BrowserWindowType | undefined> => {\n const remote = getRemote()\n const data: {winId: number; winName: string, winExtraData: string} = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'get', data: idOrName})\n const win = remote.BrowserWindow.fromId(data.winId)! as BrowserWindowType;\n if (win) {\n // @ts-ignore\n win && (win['_name'] = `${data.winName || ''}`);\n // @ts-ignore\n win && (win['_extraData'] = `${data.winExtraData|| ''}`);\n }\n return win;\n}\n\n/**\n * 获取所有窗口\n * @returns\n */\nexport const getAll = async (): Promise<Map<number, BrowserWindowType>> => {\n const remote = getRemote()\n const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'getAll', data: undefined})\n const wins = new Map();\n const allW = remote.BrowserWindow.getAllWindows()\n for (const key in data) {\n const element = data[key];\n const win = allW.find(i => {\n return `${i.id}` === `${element?.winId}`\n })\n if (win) {\n // @ts-ignore\n win && (win['_name'] = `${element?.winName || ''}`);\n // @ts-ignore\n win && (win['_extraData'] = `${element?.winExtraData|| ''}`);\n wins.set(key, win)\n }\n }\n return wins;\n}\n\n/**\n * 关闭窗口\n * @param name\n * @returns\n */\nexport const close = async (idOrName: string | number): Promise<boolean> => {\n await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'close', data: idOrName})\n return true;\n}\n\nexport const closeAll = async (): Promise<boolean> => {\n await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'closeAll', data: undefined})\n return true;\n}\n\n/**\n * 用webContentIds查找到window\n*/\nexport const getWindowForWebContentId = async (webContentId: number) => {\n const winId = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'getWindowForWebContentId', data: webContentId})\n return get(winId);\n}\n\n/**\n * 获取 preload\n * @returns\n */\nexport const getPreload = (() => {\n let cachePreload: undefined | string = undefined;\n return async (): Promise<string | undefined> => {\n if (cachePreload) {\n return cachePreload;\n }\n const data: string | undefined = await getIpc().invoke(\n '__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__',\n {\n type: 'getPreload',\n data: undefined,\n }\n )\n cachePreload = data;\n return data;\n }\n})()\n\ngetPreload();\n\n// const handleOpenDevTools = (e: HTMLElement, ev: KeyboardEvent): any => {\n// const remote = getRemote()\n// const webContents = remote.getCurrentWebContents()\n// webContents.openDevTools({\n// mode: 'detach'\n// })\n// return '';\n// }\n\n// export const registerDevTools = () => {\n// document.body.removeEventListener('keydown', handleOpenDevTools)\n// document.body.addEventListener('keydown', handleOpenDevTools)\n// }\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/renderer/index.ts"],"sourcesContent":["/** Used in Renderer process */\nimport type {BrowserView, BrowserWindow, IpcRenderer} from 'electron'\nimport { BVItem, BWItem, ElectronWindowsManagerOptions } from '../common';\nimport type RemoteType from '@electron/remote'\nimport eIpc from '@lynker-desktop/electron-ipc/renderer'\n\nconst getIpc = (): IpcRenderer => {\n try {\n // @ts-ignore\n return window?.__ELECTRON_WINDOW_MANAGER__?.ipcRenderer || window?.require('electron').ipcRenderer\n } catch (error) {\n console.error('当前非桌面端环境, 请在桌面端中调用');\n return {} as IpcRenderer;\n }\n}\n\nconst getRemote = (): typeof RemoteType => {\n try {\n // @ts-ignore\n return window?.__ELECTRON_WINDOW_MANAGER__?.remote || window?.require('@electron/remote')\n } catch (error) {\n console.error('getIpc error: ', error)\n return {} as typeof RemoteType;\n }\n}\n\n/**\n * 一次性获取所有窗口的 BrowserView\n */\nconst getAllBv = () => {\n const remote = getRemote()\n // 一次性获取所有窗口的 BrowserView\n const allWindows = remote.BrowserWindow.getAllWindows();\n let allBrowserViews: Array<BrowserView> = [];\n\n allWindows.forEach(window => {\n const views = window.getBrowserViews();\n allBrowserViews = allBrowserViews.concat(views);\n });\n return allBrowserViews;\n}\n\n/**\n * 创建窗口\n * @param options\n * @returns\n */\nexport const create = async (options: ElectronWindowsManagerOptions): Promise<BWItem | BVItem> => {\n const remote = getRemote()\n const data: {winId: number; winName: string} = await eIpc.RendererIPC.invokeMain('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'create', data: options})\n let win = remote.BrowserWindow.fromId(data.winId)! as BWItem | BVItem;\n if (!win) {\n const webContent = remote.webContents.fromId(data.winId);\n win = getAllBv().find(i => i.webContents === webContent) as BVItem;\n }\n if (win) {\n // @ts-ignore\n win && (win['_name'] = `${data.winName}`);\n // @ts-ignore\n win && (win['_type'] = `${element?.winType || ''}`);\n // @ts-ignore\n win && (win['_extraData'] = `${data.winExtraData || ''}`);\n }\n\n return win;\n}\n\n/**\n * 获取当前窗口实例\n */\nexport const getCurrentWindow = async () => {\n const remote = getRemote();\n const winId = remote.getCurrentWindow().id;\n return get(winId);\n}\n\n/**\n * 获取窗口\n * @param idOrName id或者名字\n * @returns\n */\nexport const get = async (idOrName: string | number): Promise<BWItem | BVItem | undefined> => {\n const remote = getRemote()\n const data: {winId: number; winName: string, winExtraData: string} = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'get', data: idOrName})\n let win = remote.BrowserWindow.fromId(data.winId)! as BWItem | BVItem;\n if (!win) {\n const webContent = remote.webContents.fromId(data.winId);\n win = getAllBv().find(i => i.webContents === webContent) as BVItem;\n }\n if (win) {\n // @ts-ignore\n win && (win['_name'] = `${data.winName || ''}`);\n // @ts-ignore\n win && (win['_type'] = `${data?.winType || ''}`);\n // @ts-ignore\n win && (win['_extraData'] = `${data.winExtraData|| ''}`);\n }\n return win;\n}\n\n/**\n * 获取所有窗口\n * @returns\n */\nexport const getAll = async (): Promise<Map<number, BWItem | BVItem>> => {\n const remote = getRemote()\n const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'getAll', data: undefined})\n const wins = new Map();\n const allW = remote.BrowserWindow.getAllWindows()\n const allV = getAllBv();\n console.error(getAllBv())\n for (const key in data) {\n const element = data[key];\n let win = allW.find(i => {\n return `${i.id}` === `${element?.winId}`\n })\n if (!win) {\n const webContent = remote.webContents.fromId(element.winId);\n // @ts-ignore\n win = allV.find(i => i.webContents === webContent) as BVItem;\n }\n if (win) {\n // @ts-ignore\n win && (win['_name'] = `${element?.winName || ''}`);\n // @ts-ignore\n win && (win['_type'] = `${element?.winType || ''}`);\n // @ts-ignore\n win && (win['_extraData'] = `${element?.winExtraData|| ''}`);\n wins.set(key, win)\n }\n }\n return wins;\n}\n\n/**\n * 关闭窗口\n * @param name\n * @returns\n */\nexport const close = async (idOrName: string | number): Promise<boolean> => {\n await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'close', data: idOrName})\n return true;\n}\n\nexport const closeAll = async (): Promise<boolean> => {\n await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'closeAll', data: undefined})\n return true;\n}\n\n/**\n * 用webContentIds查找到window\n*/\nexport const getWindowForWebContentId = async (webContentId: number) => {\n const winId = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'getWindowForWebContentId', data: webContentId})\n return get(winId);\n}\n\n/**\n * 获取 preload\n * @returns\n */\nexport const getPreload = (() => {\n let cachePreload: undefined | string = undefined;\n return async (): Promise<string | undefined> => {\n if (cachePreload) {\n return cachePreload;\n }\n const data: string | undefined = await getIpc().invoke(\n '__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__',\n {\n type: 'getPreload',\n data: undefined,\n }\n )\n cachePreload = data;\n return data;\n }\n})()\n\ngetPreload();\n\n// const handleOpenDevTools = (e: HTMLElement, ev: KeyboardEvent): any => {\n// const remote = getRemote()\n// const webContents = remote.getCurrentWebContents()\n// webContents.openDevTools({\n// mode: 'detach'\n// })\n// return '';\n// }\n\n// export const registerDevTools = () => {\n// document.body.removeEventListener('keydown', handleOpenDevTools)\n// document.body.addEventListener('keydown', handleOpenDevTools)\n// }\n"],"names":[],"mappings":"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"}
|
package/main/index.d.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { WebContents } from 'electron';
|
|
2
|
-
import type { ElectronWindowsManagerOptions,
|
|
2
|
+
import type { ElectronWindowsManagerOptions, BWItem, BVItem } from '../common';
|
|
3
3
|
export declare const getCustomSession: () => Electron.Session;
|
|
4
4
|
export declare const enable: (win: WebContents) => void;
|
|
5
5
|
export declare class WindowsManager {
|
|
6
6
|
loadingViewUrl: string | undefined;
|
|
7
7
|
errorViewUrl: string | undefined;
|
|
8
8
|
preload?: string;
|
|
9
|
-
windows: Map<number,
|
|
9
|
+
windows: Map<number, BWItem | BVItem | null>;
|
|
10
10
|
constructor(preload?: string, loadingViewUrl?: string, errorViewUrl?: string);
|
|
11
|
-
create(options: ElectronWindowsManagerOptions):
|
|
12
|
-
_setLoadingView(window:
|
|
13
|
-
get(idOrName: string | number):
|
|
14
|
-
getAll(): Map<number,
|
|
11
|
+
create(options: ElectronWindowsManagerOptions): any;
|
|
12
|
+
_setLoadingView(window: BWItem, createOptions: ElectronWindowsManagerOptions): void;
|
|
13
|
+
get(idOrName: string | number): BWItem | BVItem | undefined;
|
|
14
|
+
getAll(): Map<number, BWItem | BVItem | null>;
|
|
15
15
|
close(idOrName: string | number): undefined;
|
|
16
16
|
closeAll(): void;
|
|
17
17
|
getPreload(): string | undefined;
|
package/main/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/main/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAmC,WAAW,EAAkE,MAAM,UAAU,CAAA;AAGvI,OAAO,KAAK,EAAE,6BAA6B,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/main/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAmC,WAAW,EAAkE,MAAM,UAAU,CAAA;AAGvI,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAE/E,eAAO,MAAM,gBAAgB,wBAQzB,CAAC;AAUL,eAAO,MAAM,MAAM,QAAS,WAAW,SAEtC,CAAA;AAED,qBAAa,cAAc;IACzB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;gBACjC,OAAO,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;IAO5E,MAAM,CAAC,OAAO,EAAE,6BAA6B;IAyK7C,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,6BAA6B;IAmF5E,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS;IA+B3D,MAAM;IAYN,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAoB/B,QAAQ;IAaR,UAAU;CAIX;AAID,eAAO,IAAI,aAAa,SAAQ,CAAC;AAEjC,eAAO,MAAM,UAAU,aAAc,MAAM,mBAAmB,MAAM,iBAAiB,MAAM,KAAG,cAkI7F,CAAA"}
|
package/main/index.js
CHANGED
|
@@ -42,92 +42,149 @@ class WindowsManager {
|
|
|
42
42
|
this.errorViewUrl = `${errorViewUrl ?? ''}`;
|
|
43
43
|
}
|
|
44
44
|
create(options) {
|
|
45
|
-
|
|
45
|
+
let window;
|
|
46
46
|
try {
|
|
47
|
-
loadingView
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
try {
|
|
56
|
-
errorView.url = `${errorView?.url ?? this.errorViewUrl}`;
|
|
57
|
-
lodash.merge(options, {
|
|
58
|
-
errorView,
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
catch (error) {
|
|
62
|
-
log('error', 'errorView error:', errorView, this.errorViewUrl);
|
|
63
|
-
}
|
|
64
|
-
log('log', 'create', options);
|
|
65
|
-
let parentWin = undefined;
|
|
66
|
-
if (typeof browserWindowOptions?.parent === 'number') {
|
|
67
|
-
parentWin = electron.BrowserWindow.fromId(browserWindowOptions?.parent) || undefined;
|
|
68
|
-
if (parentWin) {
|
|
69
|
-
browserWindowOptions.parent = parentWin;
|
|
47
|
+
const { type = 'BW', name = 'anonymous', url, loadingView = { url: undefined }, errorView = { url: undefined }, browserWindow: browserWindowOptions, openDevTools = false, preventOriginClose = false, } = options;
|
|
48
|
+
options.type = type;
|
|
49
|
+
try {
|
|
50
|
+
loadingView.url = `${loadingView?.url ?? this.loadingViewUrl}`;
|
|
51
|
+
lodash.merge(options, {
|
|
52
|
+
loadingView,
|
|
53
|
+
});
|
|
70
54
|
}
|
|
71
|
-
|
|
72
|
-
|
|
55
|
+
catch (error) {
|
|
56
|
+
log('error', 'loadingView error:', loadingView, this.loadingViewUrl);
|
|
73
57
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
webPreferences: {
|
|
80
|
-
// session: getCustomSession(),
|
|
81
|
-
plugins: true,
|
|
82
|
-
nodeIntegration: true,
|
|
83
|
-
contextIsolation: false,
|
|
84
|
-
backgroundThrottling: false,
|
|
85
|
-
nativeWindowOpen: false,
|
|
86
|
-
webSecurity: false,
|
|
87
|
-
preload: browserWindowOptions?.webPreferences?.preload || this.preload,
|
|
58
|
+
try {
|
|
59
|
+
errorView.url = `${errorView?.url ?? this.errorViewUrl}`;
|
|
60
|
+
lodash.merge(options, {
|
|
61
|
+
errorView,
|
|
62
|
+
});
|
|
88
63
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
64
|
+
catch (error) {
|
|
65
|
+
log('error', 'errorView error:', errorView, this.errorViewUrl);
|
|
66
|
+
}
|
|
67
|
+
let parentWin = undefined;
|
|
68
|
+
if (typeof browserWindowOptions?.parent === 'number') {
|
|
69
|
+
parentWin = electron.BrowserWindow.fromId(browserWindowOptions?.parent) || undefined;
|
|
70
|
+
if (parentWin) {
|
|
71
|
+
browserWindowOptions.parent = parentWin;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
browserWindowOptions.parent = undefined;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
log('log', 'create 1: ', options);
|
|
78
|
+
log('log', 'create 2: ', `parentWin: ${parentWin?.id}`);
|
|
79
|
+
window = type === 'BV' ?
|
|
80
|
+
new electron.BrowserView(lodash.merge((browserWindowOptions || {}), {
|
|
81
|
+
parent: undefined,
|
|
82
|
+
webPreferences: {
|
|
83
|
+
// session: getCustomSession(),
|
|
84
|
+
plugins: true,
|
|
85
|
+
nodeIntegration: true,
|
|
86
|
+
contextIsolation: false,
|
|
87
|
+
backgroundThrottling: false,
|
|
88
|
+
nativeWindowOpen: false,
|
|
89
|
+
webSecurity: false,
|
|
90
|
+
preload: browserWindowOptions?.webPreferences?.preload || this.preload,
|
|
91
|
+
}
|
|
92
|
+
}))
|
|
93
|
+
: new electron.BrowserWindow(lodash.merge({
|
|
94
|
+
acceptFirstMouse: true,
|
|
95
|
+
}, (browserWindowOptions || {}), {
|
|
96
|
+
parent: parentWin,
|
|
97
|
+
webPreferences: {
|
|
98
|
+
// session: getCustomSession(),
|
|
99
|
+
plugins: true,
|
|
100
|
+
nodeIntegration: true,
|
|
101
|
+
contextIsolation: false,
|
|
102
|
+
backgroundThrottling: false,
|
|
103
|
+
nativeWindowOpen: false,
|
|
104
|
+
webSecurity: false,
|
|
105
|
+
preload: browserWindowOptions?.webPreferences?.preload || this.preload,
|
|
106
|
+
}
|
|
107
|
+
}));
|
|
108
|
+
try {
|
|
109
|
+
remote__namespace.enable(window.webContents);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
log('error', 'enable: ', error);
|
|
113
|
+
}
|
|
114
|
+
// @ts-ignore
|
|
115
|
+
try {
|
|
116
|
+
window.id = window.id || window.webContents.id;
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
log('error', 'set id: ', error);
|
|
120
|
+
}
|
|
121
|
+
window._type = type;
|
|
122
|
+
window._name = name;
|
|
123
|
+
window._extraData = `${options?.extraData || ''}`;
|
|
124
|
+
log('log', 'create 5: ', window.id, window._name);
|
|
125
|
+
if (loadingView?.url) {
|
|
126
|
+
if (type === 'BW') {
|
|
127
|
+
// @ts-ignore
|
|
128
|
+
this._setLoadingView(window, options);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (errorView?.url) {
|
|
132
|
+
const showErrorView = lodash.debounce(() => {
|
|
133
|
+
const _url = window.webContents.getURL() || url;
|
|
134
|
+
if (_url) {
|
|
135
|
+
// @ts-ignore
|
|
136
|
+
window.loadURL ? window.loadURL(`${errorView?.url}`) : window.webContents.loadURL(`${errorView?.url}`);
|
|
137
|
+
window.webContents.executeJavaScript(`window['__ELECTRON_WINDOW_MANAGER_DID_FAIL_LOAD_URL__'] = "${_url}"`);
|
|
138
|
+
}
|
|
139
|
+
}, 300);
|
|
140
|
+
window.webContents.on('did-fail-load', () => {
|
|
141
|
+
showErrorView();
|
|
142
|
+
});
|
|
143
|
+
window.webContents.on('did-start-loading', () => {
|
|
144
|
+
showErrorView.cancel();
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
window.webContents.on('destroyed', () => {
|
|
148
|
+
this.windows.set(window.id, null);
|
|
149
|
+
this.windows.delete(window.id);
|
|
104
150
|
});
|
|
105
|
-
window.webContents.on('
|
|
106
|
-
|
|
151
|
+
window.webContents.on('dom-ready', () => {
|
|
152
|
+
if (openDevTools) {
|
|
153
|
+
window.webContents.openDevTools();
|
|
154
|
+
}
|
|
107
155
|
});
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
156
|
+
if (type === 'BW') {
|
|
157
|
+
// @ts-ignore
|
|
158
|
+
window.addListener('close', (event) => {
|
|
159
|
+
log('log', 'close', window.id, window._name);
|
|
160
|
+
this.windows.set(window.id, null);
|
|
161
|
+
this.windows.delete(window.id);
|
|
162
|
+
if (preventOriginClose) {
|
|
163
|
+
event.preventDefault();
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
// @ts-ignore
|
|
168
|
+
window.addListener('closed', () => {
|
|
169
|
+
log('log', 'closed', window.id, window._name);
|
|
170
|
+
this.windows.set(window.id, null);
|
|
171
|
+
this.windows.delete(window.id);
|
|
172
|
+
});
|
|
116
173
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
this.windows.set(window.id, null);
|
|
121
|
-
this.windows.delete(window.id);
|
|
122
|
-
});
|
|
123
|
-
window.webContents.on('dom-ready', () => {
|
|
124
|
-
if (openDevTools) {
|
|
125
|
-
window.webContents.openDevTools();
|
|
174
|
+
if (type === 'BV') {
|
|
175
|
+
parentWin?.addBrowserView(window);
|
|
176
|
+
log('log', 'create - addBrowserView', parentWin, window);
|
|
126
177
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
178
|
+
// @ts-ignore
|
|
179
|
+
window.loadURL ? window.loadURL(options.url) : window.webContents.loadURL(options.url);
|
|
180
|
+
// @ts-ignore
|
|
181
|
+
window.focus ? window.focus() : window.webContents.focus();
|
|
182
|
+
this.windows.set(window.id || window.webContents.id, window);
|
|
183
|
+
log('log', 'create', this.windows.keys());
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
log('error', 'create', error);
|
|
187
|
+
}
|
|
131
188
|
return window;
|
|
132
189
|
}
|
|
133
190
|
_setLoadingView(window, createOptions) {
|
|
@@ -237,7 +294,7 @@ class WindowsManager {
|
|
|
237
294
|
getAll() {
|
|
238
295
|
log('log', 'getAll');
|
|
239
296
|
this.windows.forEach((win, key) => {
|
|
240
|
-
|
|
297
|
+
log('log', 'getAll', key, win, win?.webContents?.isDestroyed, win?.webContents?.isDestroyed?.());
|
|
241
298
|
if (!(win && win?.webContents?.isDestroyed && !win?.webContents?.isDestroyed?.())) {
|
|
242
299
|
this.windows.set(key, null);
|
|
243
300
|
this.windows.delete(key);
|
|
@@ -268,8 +325,13 @@ class WindowsManager {
|
|
|
268
325
|
closeAll() {
|
|
269
326
|
log('log', 'closeAll');
|
|
270
327
|
this.windows.forEach((i) => {
|
|
271
|
-
|
|
272
|
-
|
|
328
|
+
try {
|
|
329
|
+
i && this.windows.delete(i?.id);
|
|
330
|
+
// @ts-ignore
|
|
331
|
+
i && i?.destroy?.();
|
|
332
|
+
}
|
|
333
|
+
catch (error) {
|
|
334
|
+
}
|
|
273
335
|
});
|
|
274
336
|
}
|
|
275
337
|
getPreload() {
|
|
@@ -294,10 +356,13 @@ const initialize = (preload, loadingViewUrl, errorViewUrl) => {
|
|
|
294
356
|
const opt = data;
|
|
295
357
|
const findWin = wm.get(opt.data.name);
|
|
296
358
|
if (findWin) {
|
|
297
|
-
|
|
359
|
+
// @ts-ignore
|
|
360
|
+
findWin?.focus?.();
|
|
361
|
+
findWin?.webContents.focus?.();
|
|
298
362
|
return {
|
|
299
363
|
winId: Number(`${findWin?.id || -1}`),
|
|
300
364
|
winName: `${findWin?._name || ''}`,
|
|
365
|
+
winType: `${findWin?._type || ''}`,
|
|
301
366
|
winExtraData: `${findWin?._extraData || ''}`,
|
|
302
367
|
};
|
|
303
368
|
}
|
|
@@ -305,6 +370,7 @@ const initialize = (preload, loadingViewUrl, errorViewUrl) => {
|
|
|
305
370
|
return {
|
|
306
371
|
winId: Number(`${res.id || -1}`),
|
|
307
372
|
winName: `${res?._name || ''}`,
|
|
373
|
+
winType: `${res?._type || ''}`,
|
|
308
374
|
winExtraData: `${res?._extraData || ''}`,
|
|
309
375
|
};
|
|
310
376
|
}
|
|
@@ -314,6 +380,7 @@ const initialize = (preload, loadingViewUrl, errorViewUrl) => {
|
|
|
314
380
|
return {
|
|
315
381
|
winId: Number(`${res?.id || -1}`),
|
|
316
382
|
winName: `${res?._name || ''}`,
|
|
383
|
+
winType: `${res?._type || ''}`,
|
|
317
384
|
winExtraData: `${res?._extraData || ''}`,
|
|
318
385
|
};
|
|
319
386
|
}
|
|
@@ -325,6 +392,7 @@ const initialize = (preload, loadingViewUrl, errorViewUrl) => {
|
|
|
325
392
|
obj[i.id] = {
|
|
326
393
|
winId: Number(`${i?.id || -1}`),
|
|
327
394
|
winName: `${i?._name || ''}`,
|
|
395
|
+
winType: `${i?._type || ''}`,
|
|
328
396
|
winExtraData: `${i?._extraData || ''}`,
|
|
329
397
|
};
|
|
330
398
|
});
|
package/main/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/src/main/index.ts"],"sourcesContent":["import lodash from 'lodash'\nimport { app, BrowserWindow, BrowserView, WebContents, BrowserWindowConstructorOptions, session, Session, webContents } from 'electron'\nimport * as remote from '@electron/remote/main'\nimport eIpc from '@lynker-desktop/electron-ipc/main'\nimport type { ElectronWindowsManagerOptions, WindowItem } from '../common';\n\nexport const getCustomSession = (() => {\n let customSession: Session;\n return () => {\n if (!customSession) {\n customSession = session.fromPartition('persist:__global_main_session__');\n }\n return customSession;\n }\n})();\n\napp.on('ready', () => {\n getCustomSession();\n});\n\nif (!remote.isInitialized()) {\n remote.initialize();\n}\n\nexport const enable = (win: WebContents) => {\n remote.enable(win)\n}\n\nexport class WindowsManager {\n loadingViewUrl: string | undefined;\n errorViewUrl: string | undefined;\n preload?: string;\n windows: Map<number, WindowItem | null>;\n constructor(preload?: string, loadingViewUrl?: string, errorViewUrl?: string) {\n this.preload = preload;\n this.windows = new Map();\n this.loadingViewUrl = `${loadingViewUrl ?? ''}`;\n this.errorViewUrl = `${errorViewUrl ?? ''}`;\n }\n\n create(options: ElectronWindowsManagerOptions) {\n const {\n name = 'anonymous',\n url,\n loadingView = {url: undefined},\n errorView = {url: undefined},\n browserWindow: browserWindowOptions,\n openDevTools = false,\n preventOriginClose = false,\n } = options;\n try {\n loadingView.url = `${loadingView?.url ?? this.loadingViewUrl}`;\n lodash.merge(\n options,\n {\n loadingView,\n }\n )\n } catch (error) {\n log('error', 'loadingView error:', loadingView, this.loadingViewUrl);\n }\n try {\n errorView.url = `${errorView?.url ?? this.errorViewUrl}`;\n lodash.merge(\n options,\n {\n errorView,\n }\n )\n } catch (error) {\n log('error', 'errorView error:', errorView, this.errorViewUrl);\n }\n log('log', 'create', options);\n let parentWin:BrowserWindowConstructorOptions['parent'] = undefined;\n if (typeof browserWindowOptions?.parent === 'number') {\n parentWin = BrowserWindow.fromId(browserWindowOptions?.parent) || undefined;\n if (parentWin) {\n browserWindowOptions.parent = parentWin;\n } else {\n browserWindowOptions.parent = undefined;\n }\n }\n const window = new BrowserWindow(\n lodash.merge(\n {\n acceptFirstMouse: true,\n },\n (browserWindowOptions || {}),\n {\n parent: parentWin,\n webPreferences: {\n // session: getCustomSession(),\n plugins: true,\n nodeIntegration: true,\n contextIsolation: false,\n backgroundThrottling: false,\n nativeWindowOpen: false,\n webSecurity: false,\n preload: browserWindowOptions?.webPreferences?.preload || this.preload,\n }\n },\n )\n ) as WindowItem;\n remote.enable(window.webContents);\n window._name = name;\n window._extraData = `${options?.extraData || ''}`;\n\n if (loadingView?.url) {\n this._setLoadingView(window, options);\n }\n if (errorView?.url) {\n const showErrorView = lodash.debounce(() => {\n window.loadURL(`${errorView?.url}`);\n }, 800);\n window.webContents.on('did-fail-load', () => {\n const _url = window.webContents.getURL() || url;\n window.webContents.executeJavaScript(`sessionStorage.setItem('__ELECTRON_WINDOW_MANAGER_DID_FAIL_LOAD_URL__', \"${_url}\")`);\n showErrorView();\n });\n window.webContents.on('did-start-loading', () => {\n showErrorView.cancel();\n });\n }\n window.addListener('close', (event) => {\n log('log', 'close', window.id, window._name);\n this.windows.set(window.id, null)\n this.windows.delete(window.id)\n if (preventOriginClose) {\n event.preventDefault();\n return;\n }\n });\n window.addListener('closed', () => {\n log('log', 'closed', window.id, window._name);\n this.windows.set(window.id, null)\n this.windows.delete(window.id)\n });\n window.webContents.on('dom-ready', () => {\n if (openDevTools) {\n window.webContents.openDevTools();\n }\n });\n this.windows.set(window.id, window);\n window.loadURL(options.url);\n window.focus();\n return window;\n }\n\n _setLoadingView(window: WindowItem, createOptions: ElectronWindowsManagerOptions) {\n if (createOptions) {\n const {\n loadingView,\n preventOriginNavigate = false,\n } = createOptions;\n let _loadingView = new BrowserView({\n webPreferences: {\n // session: getCustomSession(),\n contextIsolation: false,\n nodeIntegration: true,\n // 允许loadURL与文件路径在开发环境\n webSecurity: false,\n }\n });\n\n if (window.isDestroyed()) {\n return;\n }\n\n const loadLoadingView = () => {\n const [ viewWidth, viewHeight ] = window.getSize();\n window.setBrowserView(_loadingView);\n _loadingView.setBounds({\n x: 0,\n y: 0,\n width: viewWidth || 10,\n height: viewHeight || 10,\n });\n log('log', 'loadLoadingView', window._name, loadingView);\n _loadingView.webContents.loadURL(loadingView?.url || '')\n };\n\n const onFailure = lodash.debounce(() => {\n if (_loadingView.webContents && !_loadingView.webContents.isDestroyed()) {\n _loadingView.webContents.close();\n }\n if (window.isDestroyed()) {\n return;\n }\n\n if (window) {\n window.removeBrowserView(_loadingView);\n }\n }, 300);\n\n loadLoadingView();\n\n window.on('resize', lodash.debounce(() => {\n if (_loadingView.webContents && !_loadingView.webContents.isDestroyed()) {\n if (window.isDestroyed()) {\n return;\n }\n const [ viewWidth, viewHeight ] = window.getSize();\n _loadingView.setBounds({ x: 0, y: 0, width: viewWidth || 10, height: viewHeight || 10 });\n }\n }, 500));\n\n window.webContents.on('will-navigate', (e) => {\n if (preventOriginNavigate) {\n e.preventDefault();\n return;\n }\n if (window.isDestroyed()) {\n return;\n }\n if (_loadingView.webContents && !_loadingView.webContents.isDestroyed()) {\n window.setBrowserView(_loadingView);\n } else {\n // if loadingView has been destroyed\n _loadingView = new BrowserView();\n loadLoadingView();\n }\n });\n window.webContents.on('dom-ready', onFailure);\n window.webContents.on('crashed', onFailure);\n window.webContents.on('unresponsive', onFailure);\n window.webContents.on('did-fail-load', onFailure);\n window.webContents.on('did-finish-load', onFailure);\n window.webContents.on('did-stop-loading', onFailure);\n }\n }\n\n get(idOrName: string | number): WindowItem | undefined {\n log('log', 'get', idOrName);\n let win: WindowItem;\n this.windows.forEach((i, key) => {\n try {\n if (!(i && i?.webContents?.isDestroyed && !i?.webContents?.isDestroyed?.())) {\n this.windows.set(key, null)\n this.windows.delete(key)\n i = null;\n }\n } catch (error) {\n log('error', 'get');\n }\n\n if (typeof idOrName === 'number') {\n if (i?.id === idOrName) {\n win = i;\n }\n } else if (typeof idOrName === 'string') {\n if (i?._name === idOrName) {\n win = i;\n }\n }\n })\n // @ts-ignore\n if (win && win?.webContents?.isDestroyed && !win?.webContents?.isDestroyed?.()) {\n return win;\n }\n return undefined;\n }\n\n getAll() {\n log('log', 'getAll');\n this.windows.forEach((win, key) => {\n console.log(key, win);\n if (!(win && win?.webContents?.isDestroyed && !win?.webContents?.isDestroyed?.())) {\n this.windows.set(key, null)\n this.windows.delete(key)\n }\n })\n return this.windows;\n }\n\n close(idOrName: string | number) {\n log('log', 'close', idOrName);\n let win: WindowItem | undefined = undefined;\n this.windows.forEach((i) => {\n if (typeof idOrName === 'number') {\n if (i?.id === idOrName) {\n win = i;\n }\n } else if (typeof idOrName === 'string') {\n if (i?._name === idOrName) {\n win = i;\n }\n }\n })\n // @ts-ignore\n win && this.windows.delete(win?.id)\n // @ts-ignore\n return win && win?.destroy();\n }\n\n closeAll() {\n log('log', 'closeAll');\n this.windows.forEach((i) => {\n i && this.windows.delete(i?.id)\n i && i?.destroy();\n })\n }\n\n getPreload() {\n log('log', 'getPreload');\n return this.preload;\n }\n}\n// @ts-ignore\nglobal['__ELECTRON_WINDOWS_MANAGER__'] = undefined;\n\nexport let isInitialized = false;\n\nexport const initialize = (preload?: string, loadingViewUrl?: string, errorViewUrl?: string): WindowsManager => {\n // @ts-ignore\n if (isInitialized && global['__ELECTRON_WINDOWS_MANAGER__']) {\n // @ts-ignore\n return global['__ELECTRON_WINDOWS_MANAGER__'];\n }\n isInitialized = true;\n // @ts-ignore\n const wm = global['__ELECTRON_WINDOWS_MANAGER__'] = new WindowsManager(preload, loadingViewUrl, errorViewUrl)\n eIpc.mainIPC.handleRenderer('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', async (data: any) => {\n if (data?.type === 'create') {\n const opt = data as {\n type: 'create';\n data: ElectronWindowsManagerOptions\n };\n const findWin = wm.get(opt.data.name);\n if (findWin) {\n findWin.focus();\n return {\n winId: Number(`${findWin?.id || - 1}`),\n winName: `${findWin?._name || ''}`,\n winExtraData: `${findWin?._extraData || ''}`,\n };\n }\n const res = wm.create(opt.data)\n return {\n winId: Number(`${res.id || -1}`),\n winName: `${res?._name || ''}`,\n winExtraData: `${res?._extraData || ''}`,\n };\n }\n if (data?.type === 'get') {\n const opt = data as {\n type: 'get';\n data: string | number;\n };\n const res = wm.get(opt?.data)\n return {\n winId: Number(`${res?.id || -1}`),\n winName: `${res?._name || ''}`,\n winExtraData: `${res?._extraData || ''}`,\n };\n }\n\n if (data?.type === 'getAll') {\n const opt = data as {\n type: 'getAll';\n data: any;\n };\n const res = wm.getAll()\n const obj = {}\n res.forEach(i => {\n // @ts-ignore\n obj[i.id] = {\n winId: Number(`${i?.id || -1}`),\n winName: `${i?._name || ''}`,\n winExtraData: `${i?._extraData || ''}`,\n }\n })\n return obj;\n }\n\n if (data?.type === 'close') {\n const opt = data as {\n type: 'close';\n data: string | number;\n };\n const res = wm.close(opt?.data)\n return res;\n }\n\n if (data?.type === 'closeAll') {\n const opt = data as {\n type: 'closeAll';\n data: undefined;\n };\n const res = wm.closeAll()\n return res;\n }\n\n if (data?.type === 'getWindowForWebContentId') {\n const opt = data as {\n type: 'getWindowForWebContentId';\n data: number;\n };\n const targetWebContents = webContents.fromId(opt.data);\n if (targetWebContents) {\n let win = BrowserWindow.fromWebContents(targetWebContents)\n if (!win) {\n // 获取所有的 BrowserWindows\n let allWindows = BrowserWindow.getAllWindows();\n\n // 遍历所有窗口,检查每个窗口的 BrowserView\n for (let _win of allWindows) {\n let views = _win.getBrowserViews();\n\n // 遍历窗口的所有 BrowserView\n for (let view of views) {\n if (view.webContents === targetWebContents) {\n win = _win;\n break;\n }\n }\n\n if (win) break;\n }\n }\n return win?.id;\n }\n return undefined;\n }\n\n if (data?.type === 'getPreload') {\n const opt = data as {\n type: 'getPreload';\n data: number;\n };\n const res = wm.getPreload()\n return res;\n }\n\n return undefined\n })\n return wm;\n}\n\nconst log = (type: 'log' | 'error', ...data: any[]) => {\n const key = `[electron-window-manager]: `\n try {\n console[type](key, ...data);\n } catch (error) {\n console.error(key, error)\n }\n}\n"],"names":["session","app","remote","BrowserWindow","BrowserView","isInitialized","webContents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/src/main/index.ts"],"sourcesContent":["import lodash from 'lodash'\nimport { app, BrowserWindow, BrowserView, WebContents, BrowserWindowConstructorOptions, session, Session, webContents } from 'electron'\nimport * as remote from '@electron/remote/main'\nimport eIpc from '@lynker-desktop/electron-ipc/main'\nimport type { ElectronWindowsManagerOptions, BWItem, BVItem } from '../common';\n\nexport const getCustomSession = (() => {\n let customSession: Session;\n return () => {\n if (!customSession) {\n customSession = session.fromPartition('persist:__global_main_session__');\n }\n return customSession;\n }\n})();\n\napp.on('ready', () => {\n getCustomSession();\n});\n\nif (!remote.isInitialized()) {\n remote.initialize();\n}\n\nexport const enable = (win: WebContents) => {\n remote.enable(win)\n}\n\nexport class WindowsManager {\n loadingViewUrl: string | undefined;\n errorViewUrl: string | undefined;\n preload?: string;\n windows: Map<number, BWItem | BVItem | null>;\n constructor(preload?: string, loadingViewUrl?: string, errorViewUrl?: string) {\n this.preload = preload;\n this.windows = new Map();\n this.loadingViewUrl = `${loadingViewUrl ?? ''}`;\n this.errorViewUrl = `${errorViewUrl ?? ''}`;\n }\n\n create(options: ElectronWindowsManagerOptions) {\n let window: any;\n try {\n const {\n type = 'BW',\n name = 'anonymous',\n url,\n loadingView = {url: undefined},\n errorView = {url: undefined},\n browserWindow: browserWindowOptions,\n openDevTools = false,\n preventOriginClose = false,\n } = options;\n options.type = type;\n try {\n loadingView.url = `${loadingView?.url ?? this.loadingViewUrl}`;\n lodash.merge(\n options,\n {\n loadingView,\n }\n )\n } catch (error) {\n log('error', 'loadingView error:', loadingView, this.loadingViewUrl);\n }\n try {\n errorView.url = `${errorView?.url ?? this.errorViewUrl}`;\n lodash.merge(\n options,\n {\n errorView,\n }\n )\n } catch (error) {\n log('error', 'errorView error:', errorView, this.errorViewUrl);\n }\n let parentWin:BrowserWindowConstructorOptions['parent'] = undefined;\n if (typeof browserWindowOptions?.parent === 'number') {\n parentWin = BrowserWindow.fromId(browserWindowOptions?.parent) || undefined;\n if (parentWin) {\n browserWindowOptions.parent = parentWin;\n } else {\n browserWindowOptions.parent = undefined;\n }\n }\n log('log', 'create 1: ', options);\n log('log', 'create 2: ', `parentWin: ${parentWin?.id}`);\n window = type === 'BV' ?\n new BrowserView(\n lodash.merge(\n (browserWindowOptions || {}),\n {\n parent: undefined,\n webPreferences: {\n // session: getCustomSession(),\n plugins: true,\n nodeIntegration: true,\n contextIsolation: false,\n backgroundThrottling: false,\n nativeWindowOpen: false,\n webSecurity: false,\n preload: browserWindowOptions?.webPreferences?.preload || this.preload,\n }\n },\n )\n ) as BVItem\n : new BrowserWindow(\n lodash.merge(\n {\n acceptFirstMouse: true,\n },\n (browserWindowOptions || {}),\n {\n parent: parentWin,\n webPreferences: {\n // session: getCustomSession(),\n plugins: true,\n nodeIntegration: true,\n contextIsolation: false,\n backgroundThrottling: false,\n nativeWindowOpen: false,\n webSecurity: false,\n preload: browserWindowOptions?.webPreferences?.preload || this.preload,\n }\n },\n )\n ) as BWItem;\n try {\n remote.enable(window.webContents);\n } catch (error) {\n log('error', 'enable: ', error)\n }\n // @ts-ignore\n try {\n window.id = window.id || window.webContents.id;\n } catch (error) {\n log('error', 'set id: ', error)\n }\n window._type = type;\n window._name = name;\n window._extraData = `${options?.extraData || ''}`;\n log('log', 'create 5: ', window.id, window._name);\n if (loadingView?.url) {\n if (type === 'BW') {\n // @ts-ignore\n this._setLoadingView(window, options);\n }\n }\n if (errorView?.url) {\n const showErrorView = lodash.debounce(() => {\n const _url = window.webContents.getURL() || url;\n if (_url) {\n // @ts-ignore\n window.loadURL ? window.loadURL(`${errorView?.url}`) : window.webContents.loadURL(`${errorView?.url}`);\n window.webContents.executeJavaScript(`window['__ELECTRON_WINDOW_MANAGER_DID_FAIL_LOAD_URL__'] = \"${_url}\"`);\n }\n }, 300);\n window.webContents.on('did-fail-load', () => {\n showErrorView();\n });\n window.webContents.on('did-start-loading', () => {\n showErrorView.cancel();\n });\n }\n window.webContents.on('destroyed', () => {\n this.windows.set(window.id, null)\n this.windows.delete(window.id)\n })\n window.webContents.on('dom-ready', () => {\n if (openDevTools) {\n window.webContents.openDevTools();\n }\n });\n if (type === 'BW') {\n // @ts-ignore\n window.addListener('close', (event) => {\n log('log', 'close', window.id, window._name);\n this.windows.set(window.id, null)\n this.windows.delete(window.id)\n if (preventOriginClose) {\n event.preventDefault();\n return;\n }\n });\n // @ts-ignore\n window.addListener('closed', () => {\n log('log', 'closed', window.id, window._name);\n this.windows.set(window.id, null)\n this.windows.delete(window.id)\n });\n\n }\n if (type === 'BV') {\n parentWin?.addBrowserView(window);\n log('log', 'create - addBrowserView', parentWin, window)\n }\n // @ts-ignore\n window.loadURL ? window.loadURL(options.url) : window.webContents.loadURL(options.url);\n // @ts-ignore\n window.focus ? window.focus() : window.webContents.focus();\n this.windows.set(window.id || window.webContents.id, window);\n log('log', 'create', this.windows.keys())\n } catch (error) {\n log('error', 'create', error)\n }\n\n return window;\n }\n\n _setLoadingView(window: BWItem, createOptions: ElectronWindowsManagerOptions) {\n if (createOptions) {\n const {\n loadingView,\n preventOriginNavigate = false,\n } = createOptions;\n let _loadingView = new BrowserView({\n webPreferences: {\n // session: getCustomSession(),\n contextIsolation: false,\n nodeIntegration: true,\n // 允许loadURL与文件路径在开发环境\n webSecurity: false,\n }\n });\n\n if (window.isDestroyed()) {\n return;\n }\n\n const loadLoadingView = () => {\n const [ viewWidth, viewHeight ] = window.getSize();\n window.setBrowserView(_loadingView);\n _loadingView.setBounds({\n x: 0,\n y: 0,\n width: viewWidth || 10,\n height: viewHeight || 10,\n });\n log('log', 'loadLoadingView', window._name, loadingView);\n _loadingView.webContents.loadURL(loadingView?.url || '')\n };\n\n const onFailure = lodash.debounce(() => {\n if (_loadingView.webContents && !_loadingView.webContents.isDestroyed()) {\n _loadingView.webContents.close();\n }\n if (window.isDestroyed()) {\n return;\n }\n\n if (window) {\n window.removeBrowserView(_loadingView);\n }\n }, 300);\n\n loadLoadingView();\n\n window.on('resize', lodash.debounce(() => {\n if (_loadingView.webContents && !_loadingView.webContents.isDestroyed()) {\n if (window.isDestroyed()) {\n return;\n }\n const [ viewWidth, viewHeight ] = window.getSize();\n _loadingView.setBounds({ x: 0, y: 0, width: viewWidth || 10, height: viewHeight || 10 });\n }\n }, 500));\n\n window.webContents.on('will-navigate', (e) => {\n if (preventOriginNavigate) {\n e.preventDefault();\n return;\n }\n if (window.isDestroyed()) {\n return;\n }\n if (_loadingView.webContents && !_loadingView.webContents.isDestroyed()) {\n window.setBrowserView(_loadingView);\n } else {\n // if loadingView has been destroyed\n _loadingView = new BrowserView();\n loadLoadingView();\n }\n });\n window.webContents.on('dom-ready', onFailure);\n window.webContents.on('crashed', onFailure);\n window.webContents.on('unresponsive', onFailure);\n window.webContents.on('did-fail-load', onFailure);\n window.webContents.on('did-finish-load', onFailure);\n window.webContents.on('did-stop-loading', onFailure);\n }\n }\n\n get(idOrName: string | number): BWItem | BVItem | undefined {\n log('log', 'get', idOrName);\n let win: BWItem | BVItem ;\n this.windows.forEach((i, key) => {\n try {\n if (!(i && i?.webContents?.isDestroyed && !i?.webContents?.isDestroyed?.())) {\n this.windows.set(key, null)\n this.windows.delete(key)\n i = null;\n }\n } catch (error) {\n log('error', 'get');\n }\n\n if (typeof idOrName === 'number') {\n if (i?.id === idOrName) {\n win = i;\n }\n } else if (typeof idOrName === 'string') {\n if (i?._name === idOrName) {\n win = i;\n }\n }\n })\n // @ts-ignore\n if (win && win?.webContents?.isDestroyed && !win?.webContents?.isDestroyed?.()) {\n return win;\n }\n return undefined;\n }\n\n getAll() {\n log('log', 'getAll');\n this.windows.forEach((win, key) => {\n log('log', 'getAll', key, win, win?.webContents?.isDestroyed, win?.webContents?.isDestroyed?.());\n if (!(win && win?.webContents?.isDestroyed && !win?.webContents?.isDestroyed?.())) {\n this.windows.set(key, null)\n this.windows.delete(key)\n }\n })\n return this.windows;\n }\n\n close(idOrName: string | number) {\n log('log', 'close', idOrName);\n let win: BWItem | BVItem | undefined = undefined;\n this.windows.forEach((i) => {\n if (typeof idOrName === 'number') {\n if (i?.id === idOrName) {\n win = i;\n }\n } else if (typeof idOrName === 'string') {\n if (i?._name === idOrName) {\n win = i;\n }\n }\n })\n // @ts-ignore\n win && this.windows.delete(win?.id)\n // @ts-ignore\n return win && win?.destroy();\n }\n\n closeAll() {\n log('log', 'closeAll');\n this.windows.forEach((i) => {\n try {\n i && this.windows.delete(i?.id)\n // @ts-ignore\n i && i?.destroy?.();\n } catch (error) {\n\n }\n })\n }\n\n getPreload() {\n log('log', 'getPreload');\n return this.preload;\n }\n}\n// @ts-ignore\nglobal['__ELECTRON_WINDOWS_MANAGER__'] = undefined;\n\nexport let isInitialized = false;\n\nexport const initialize = (preload?: string, loadingViewUrl?: string, errorViewUrl?: string): WindowsManager => {\n // @ts-ignore\n if (isInitialized && global['__ELECTRON_WINDOWS_MANAGER__']) {\n // @ts-ignore\n return global['__ELECTRON_WINDOWS_MANAGER__'];\n }\n isInitialized = true;\n // @ts-ignore\n const wm = global['__ELECTRON_WINDOWS_MANAGER__'] = new WindowsManager(preload, loadingViewUrl, errorViewUrl)\n eIpc.mainIPC.handleRenderer('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', async (data: any) => {\n if (data?.type === 'create') {\n const opt = data as {\n type: 'create';\n data: ElectronWindowsManagerOptions\n };\n const findWin = wm.get(opt.data.name);\n if (findWin) {\n // @ts-ignore\n findWin?.focus?.();\n findWin?.webContents.focus?.();\n return {\n winId: Number(`${findWin?.id || - 1}`),\n winName: `${findWin?._name || ''}`,\n winType: `${findWin?._type || ''}`,\n winExtraData: `${findWin?._extraData || ''}`,\n };\n }\n const res = wm.create(opt.data)\n return {\n winId: Number(`${res.id || -1}`),\n winName: `${res?._name || ''}`,\n winType: `${res?._type || ''}`,\n winExtraData: `${res?._extraData || ''}`,\n };\n }\n if (data?.type === 'get') {\n const opt = data as {\n type: 'get';\n data: string | number;\n };\n const res = wm.get(opt?.data)\n return {\n winId: Number(`${res?.id || -1}`),\n winName: `${res?._name || ''}`,\n winType: `${res?._type || ''}`,\n winExtraData: `${res?._extraData || ''}`,\n };\n }\n\n if (data?.type === 'getAll') {\n const opt = data as {\n type: 'getAll';\n data: any;\n };\n const res = wm.getAll()\n const obj = {}\n res.forEach(i => {\n // @ts-ignore\n obj[i.id] = {\n winId: Number(`${i?.id || -1}`),\n winName: `${i?._name || ''}`,\n winType: `${i?._type || ''}`,\n winExtraData: `${i?._extraData || ''}`,\n }\n })\n return obj;\n }\n\n if (data?.type === 'close') {\n const opt = data as {\n type: 'close';\n data: string | number;\n };\n const res = wm.close(opt?.data)\n return res;\n }\n\n if (data?.type === 'closeAll') {\n const opt = data as {\n type: 'closeAll';\n data: undefined;\n };\n const res = wm.closeAll()\n return res;\n }\n\n if (data?.type === 'getWindowForWebContentId') {\n const opt = data as {\n type: 'getWindowForWebContentId';\n data: number;\n };\n const targetWebContents = webContents.fromId(opt.data);\n if (targetWebContents) {\n let win = BrowserWindow.fromWebContents(targetWebContents)\n if (!win) {\n // 获取所有的 BrowserWindows\n let allWindows = BrowserWindow.getAllWindows();\n\n // 遍历所有窗口,检查每个窗口的 BrowserView\n for (let _win of allWindows) {\n let views = _win.getBrowserViews();\n\n // 遍历窗口的所有 BrowserView\n for (let view of views) {\n if (view.webContents === targetWebContents) {\n win = _win;\n break;\n }\n }\n\n if (win) break;\n }\n }\n return win?.id;\n }\n return undefined;\n }\n\n if (data?.type === 'getPreload') {\n const opt = data as {\n type: 'getPreload';\n data: number;\n };\n const res = wm.getPreload()\n return res;\n }\n\n return undefined\n })\n return wm;\n}\n\nconst log = (type: 'log' | 'error', ...data: any[]) => {\n const key = `[electron-window-manager]: `\n try {\n console[type](key, ...data);\n } catch (error) {\n console.error(key, error)\n }\n}\n"],"names":["session","app","remote","BrowserWindow","BrowserView","isInitialized","webContents"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lynker-desktop/electron-window-manager",
|
|
3
|
-
"version": "0.0.4-alpha.
|
|
3
|
+
"version": "0.0.4-alpha.65",
|
|
4
4
|
"description": "electron-window-manager",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"electron",
|
|
@@ -77,5 +77,5 @@
|
|
|
77
77
|
"tslib": "^2.6.3",
|
|
78
78
|
"typescript": "^5.5.3"
|
|
79
79
|
},
|
|
80
|
-
"gitHead": "
|
|
80
|
+
"gitHead": "1c0baf4085971bfd4a3de3416345cc6a61ce3253"
|
|
81
81
|
}
|