@lynker-desktop/electron-window-manager 0.0.7-alpha.1 → 0.0.7-alpha.11
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/esm/main/index.d.ts +1 -0
- package/esm/main/index.d.ts.map +1 -1
- package/esm/main/index.js +184 -57
- package/esm/main/index.js.map +1 -1
- package/esm/renderer/index.d.ts +1 -0
- package/esm/renderer/index.d.ts.map +1 -1
- package/esm/renderer/index.js +5 -1
- package/esm/renderer/index.js.map +1 -1
- package/main/index.d.ts +1 -0
- package/main/index.d.ts.map +1 -1
- package/main/index.js +191 -64
- package/main/index.js.map +1 -1
- package/package.json +2 -2
- package/renderer/index.d.ts +1 -0
- package/renderer/index.d.ts.map +1 -1
- package/renderer/index.js +5 -0
- package/renderer/index.js.map +1 -1
package/esm/renderer/index.js
CHANGED
|
@@ -191,6 +191,10 @@ const getWindowForWebContentId = async (webContentId) => {
|
|
|
191
191
|
const winId = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'getWindowForWebContentId', data: webContentId });
|
|
192
192
|
return get(winId);
|
|
193
193
|
};
|
|
194
|
+
const rename = async (idOrName, newName) => {
|
|
195
|
+
const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'rename', data: { idOrName, newName } });
|
|
196
|
+
return get(data.winId);
|
|
197
|
+
};
|
|
194
198
|
/**
|
|
195
199
|
* 设置预加载webContentUrl
|
|
196
200
|
* @param preloadWebContentsUrl
|
|
@@ -230,5 +234,5 @@ getPreload();
|
|
|
230
234
|
// document.body.addEventListener('keydown', handleOpenDevTools)
|
|
231
235
|
// }
|
|
232
236
|
|
|
233
|
-
export { close, closeAll, create, get, getAll, getCurrentWindow, getPreload, getWindowForWebContentId, setPreloadWebContentsUrl };
|
|
237
|
+
export { close, closeAll, create, get, getAll, getCurrentWindow, getPreload, getWindowForWebContentId, rename, setPreloadWebContentsUrl };
|
|
234
238
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/renderer/index.ts"],"sourcesContent":["/** Used in Renderer process */\nimport type {BrowserView, BrowserWindow, IpcRenderer, WebContents} 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\nconst getBVByWebContent = (webContent: WebContents) : BVItem => {\n const allBv = getAllBv();\n const win = allBv.find(i => i.webContents === webContent) as BVItem;\n // win不存在时,但webContent存在时,说明bv没有挂载到window上,需要手动创建\n if (!win && !webContent?.isDestroyed?.()) {\n // @ts-ignore\n return {\n id: webContent.id,\n _id: webContent.id,\n _type: 'BV',\n _name: '',\n _extraData: '',\n webContents: webContent,\n getBounds: async () => {\n return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'borrowView_getBounds', data: {webContentId: webContent.id, options: {}}})\n },\n setBounds: async (bounds: any) => {\n return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'borrowView_setBounds', data: {webContentId: webContent.id, options: bounds}})\n },\n setAutoResize: async (autoResize: boolean) => {\n return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'borrowView_setAutoResize', data: {webContentId: webContent.id, options: autoResize}})\n },\n setBackgroundColor: async (color: string) => {\n return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'borrowView_setBackgroundColor', data: {webContentId: webContent.id, options: color}})\n },\n } as BVItem;;\n }\n return win;\n}\n\n/**\n * 创建窗口\n * @param options\n * @returns\n */\nexport function create(options: Omit<ElectronWindowsManagerOptions, 'type'> & { type?: 'BW' }): Promise<BWItem>;\nexport function create(options: ElectronWindowsManagerOptions & { type: 'BV' }): Promise<BVItem>;\nexport function create(options: ElectronWindowsManagerOptions): Promise<BWItem | BVItem>;\n\nexport async function create(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'] = `${data?.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 let win = await get(winId);\n return win;\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 if (webContent) {\n win = getBVByWebContent(webContent) as BVItem;\n }\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 function getAll(type: 'BW'): Promise<Map<number, BWItem>>;\nexport function getAll(type: 'BV'): Promise<Map<number, BVItem>>;\nexport function getAll(): Promise<Map<number, BWItem | BVItem>>;\n\nexport async function getAll(type?: 'BW' | 'BV'): 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 bwWindows = new Map<number, BWItem>();\n const bvWindows = new Map<number, BVItem>();\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 if (webContent) {\n // @ts-ignore\n win = getBVByWebContent(webContent) as BVItem;\n }\n }\n if (win) {\n try {\n // @ts-ignore\n win && (win['id'] = Number(`${element?.winId}`));\n } catch (error) {\n }\n // @ts-ignore\n win && (win['_id'] = Number(`${element?.winId}`));\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 // @ts-ignore\n wins.set(win.id || win._id, win)\n // @ts-ignore\n if (win?._type === 'BW') {\n // @ts-ignore\n bwWindows.set(win.id || win._id, win);\n }\n // @ts-ignore\n if (win?._type === 'BV') {\n // @ts-ignore\n bvWindows.set(win.id || win._id, win);\n }\n }\n }\n if (type === 'BW') {\n return bwWindows;\n }\n if (type === 'BV') {\n return bvWindows;\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 * 设置预加载webContentUrl\n * @param preloadWebContentsUrl\n */\nexport const setPreloadWebContentsUrl = async (preloadWebContentsUrl: string) => {\n await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'setPreloadWebContentsUrl', data: preloadWebContentsUrl})\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, WebContents} 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\nconst getBVByWebContent = (webContent: WebContents) : BVItem => {\n const allBv = getAllBv();\n const win = allBv.find(i => i.webContents === webContent) as BVItem;\n // win不存在时,但webContent存在时,说明bv没有挂载到window上,需要手动创建\n if (!win && !webContent?.isDestroyed?.()) {\n // @ts-ignore\n return {\n id: webContent.id,\n _id: webContent.id,\n _type: 'BV',\n _name: '',\n _extraData: '',\n webContents: webContent,\n getBounds: async () => {\n return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'borrowView_getBounds', data: {webContentId: webContent.id, options: {}}})\n },\n setBounds: async (bounds: any) => {\n return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'borrowView_setBounds', data: {webContentId: webContent.id, options: bounds}})\n },\n setAutoResize: async (autoResize: boolean) => {\n return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'borrowView_setAutoResize', data: {webContentId: webContent.id, options: autoResize}})\n },\n setBackgroundColor: async (color: string) => {\n return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'borrowView_setBackgroundColor', data: {webContentId: webContent.id, options: color}})\n },\n } as BVItem;;\n }\n return win;\n}\n\n/**\n * 创建窗口\n * @param options\n * @returns\n */\nexport function create(options: Omit<ElectronWindowsManagerOptions, 'type'> & { type?: 'BW' }): Promise<BWItem>;\nexport function create(options: ElectronWindowsManagerOptions & { type: 'BV' }): Promise<BVItem>;\nexport function create(options: ElectronWindowsManagerOptions): Promise<BWItem | BVItem>;\n\nexport async function create(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'] = `${data?.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 let win = await get(winId);\n return win;\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 if (webContent) {\n win = getBVByWebContent(webContent) as BVItem;\n }\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 function getAll(type: 'BW'): Promise<Map<number, BWItem>>;\nexport function getAll(type: 'BV'): Promise<Map<number, BVItem>>;\nexport function getAll(): Promise<Map<number, BWItem | BVItem>>;\n\nexport async function getAll(type?: 'BW' | 'BV'): 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 bwWindows = new Map<number, BWItem>();\n const bvWindows = new Map<number, BVItem>();\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 if (webContent) {\n // @ts-ignore\n win = getBVByWebContent(webContent) as BVItem;\n }\n }\n if (win) {\n try {\n // @ts-ignore\n win && (win['id'] = Number(`${element?.winId}`));\n } catch (error) {\n }\n // @ts-ignore\n win && (win['_id'] = Number(`${element?.winId}`));\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 // @ts-ignore\n wins.set(win.id || win._id, win)\n // @ts-ignore\n if (win?._type === 'BW') {\n // @ts-ignore\n bwWindows.set(win.id || win._id, win);\n }\n // @ts-ignore\n if (win?._type === 'BV') {\n // @ts-ignore\n bvWindows.set(win.id || win._id, win);\n }\n }\n }\n if (type === 'BW') {\n return bwWindows;\n }\n if (type === 'BV') {\n return bvWindows;\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\nexport const rename = async (idOrName: string | number, newName: string) => {\n const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'rename', data: {idOrName, newName}})\n return get(data.winId);\n}\n\n/**\n * 设置预加载webContentUrl\n * @param preloadWebContentsUrl\n */\nexport const setPreloadWebContentsUrl = async (preloadWebContentsUrl: string) => {\n await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'setPreloadWebContentsUrl', data: preloadWebContentsUrl})\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
|
@@ -37,6 +37,7 @@ export declare class WindowsManager {
|
|
|
37
37
|
getAll(): Map<number, BWItem | BVItem>;
|
|
38
38
|
close(idOrName: string | number): boolean;
|
|
39
39
|
closeAll(): void;
|
|
40
|
+
rename(idOrName: string | number, newName: string): BWItem | BVItem | undefined;
|
|
40
41
|
getPreload(): string | undefined;
|
|
41
42
|
private _applyBrowserWindowOptions;
|
|
42
43
|
private _applyBrowserViewOptions;
|
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;AAIvI,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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/main/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAmC,WAAW,EAAkE,MAAM,UAAU,CAAA;AAIvI,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;AAmBD,qBAAa,cAAc;IACzB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IACtC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,gCAAgC,EAAE,MAAM,GAAG,IAAI,CAAQ;IACvD,8BAA8B,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,UAAU,EAAE,OAAO,CAAS;gBAChB,OAAO,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAajG,wBAAwB,CAAC,qBAAqB,EAAE,MAAM;YAgBxC,iBAAiB;IAwB/B,OAAO,CAAC,gBAAgB;IA2CxB,OAAO,CAAC,gBAAgB;IAsCxB;;;OAGG;IACH,kBAAkB,CAAC,GAAG,EAAE,MAAM;IAK9B,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,6BAA6B,EAAE,MAAM,CAAC,GAAG;QAAE,IAAI,CAAC,EAAE,IAAI,CAAA;KAAE,GAAG,MAAM;IACtF,MAAM,CAAC,OAAO,EAAE,6BAA6B,GAAG;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,GAAG,MAAM;IACvE,MAAM,CAAC,OAAO,EAAE,6BAA6B,GAAG,MAAM,GAAG,MAAM;IA+T/D,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,6BAA6B;IAmF5E,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS;IA6B3D,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IACvC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IACvC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAyBtC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAqC/B,QAAQ;IA0BR,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM;IAqCjD,UAAU;IAKV,OAAO,CAAC,0BAA0B;IAoBlC,OAAO,CAAC,wBAAwB;IAiB1B,wBAAwB,CAAC,GAAG,EAAE,MAAM;CAqB3C;AAID,eAAO,IAAI,aAAa,SAAQ,CAAC;AAEjC,eAAO,MAAM,UAAU,aAAc,MAAM,mBAAmB,MAAM,iBAAiB,MAAM,0BAA0B,MAAM,KAAG,cAkP7H,CAAA"}
|
package/main/index.js
CHANGED
|
@@ -5,14 +5,14 @@ const eIpc = require('@lynker-desktop/electron-ipc/main');
|
|
|
5
5
|
const md5 = require('md5');
|
|
6
6
|
|
|
7
7
|
function _interopNamespaceDefault(e) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
8
|
+
const n = Object.create(null);
|
|
9
|
+
if (e) {
|
|
10
|
+
for (const k in e) {
|
|
11
|
+
n[k] = e[k];
|
|
13
12
|
}
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
}
|
|
14
|
+
n.default = e;
|
|
15
|
+
return n;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
const remote__namespace = /*#__PURE__*/_interopNamespaceDefault(remote);
|
|
@@ -35,6 +35,22 @@ if (!remote__namespace.isInitialized()) {
|
|
|
35
35
|
const enable = (win) => {
|
|
36
36
|
remote__namespace.enable(win);
|
|
37
37
|
};
|
|
38
|
+
const initWebContentsVal = (win, preload) => {
|
|
39
|
+
win.webContents.executeJavaScript(`
|
|
40
|
+
try {
|
|
41
|
+
const data = {
|
|
42
|
+
__ELECTRON_WINDOW_MANAGER_WEB_CONTENTS_ID__: ${JSON.stringify(win.webContents.id)},
|
|
43
|
+
__ELECTRON_WINDOW_MANAGER_TYPE__: ${JSON.stringify(win._type)},
|
|
44
|
+
__ELECTRON_WINDOW_MANAGER_NAME__: ${JSON.stringify(win._name)},
|
|
45
|
+
__ELECTRON_WINDOW_MANAGER_EXTRA_DATA__: ${JSON.stringify(win._extraData || '')},
|
|
46
|
+
__ELECTRON_WINDOW_MANAGER_PRELOAD__: ${JSON.stringify(preload)}
|
|
47
|
+
};
|
|
48
|
+
Object.entries(data).forEach(([key, value]) => {
|
|
49
|
+
window[key] = value;
|
|
50
|
+
});
|
|
51
|
+
} catch (error) {}
|
|
52
|
+
`);
|
|
53
|
+
};
|
|
38
54
|
class WindowsManager {
|
|
39
55
|
constructor(preload, loadingViewUrl, errorViewUrl, preloadUrl) {
|
|
40
56
|
this.preloadedBW = null;
|
|
@@ -99,42 +115,44 @@ class WindowsManager {
|
|
|
99
115
|
return new Promise((resolve) => {
|
|
100
116
|
const preload = this.preload;
|
|
101
117
|
const url = this.preloadWebContentsUrl;
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
118
|
+
if (this.preloadWebContentsUrl) {
|
|
119
|
+
const instance = new electron.BrowserWindow({
|
|
120
|
+
show: false,
|
|
121
|
+
...options,
|
|
122
|
+
webPreferences: {
|
|
123
|
+
webviewTag: true,
|
|
124
|
+
plugins: true,
|
|
125
|
+
nodeIntegration: true,
|
|
126
|
+
contextIsolation: false,
|
|
127
|
+
backgroundThrottling: false,
|
|
128
|
+
webSecurity: false,
|
|
129
|
+
preload: preload,
|
|
130
|
+
...(options.webPreferences || {}),
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
try {
|
|
134
|
+
remote__namespace.enable(instance.webContents);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
log('error', '预加载 BW 设置 remote 失败', error);
|
|
138
|
+
}
|
|
139
|
+
try {
|
|
140
|
+
// @ts-ignore
|
|
141
|
+
instance._id = instance.webContents.id;
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
log('error', '预加载 BW 设置 _id 失败', error);
|
|
114
145
|
}
|
|
115
|
-
});
|
|
116
|
-
try {
|
|
117
|
-
remote__namespace.enable(instance.webContents);
|
|
118
|
-
}
|
|
119
|
-
catch (error) {
|
|
120
|
-
log('error', '预加载 BW 设置 remote 失败', error);
|
|
121
|
-
}
|
|
122
|
-
try {
|
|
123
146
|
// @ts-ignore
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
147
|
+
log('log', '创建预BW: ', instance._id);
|
|
148
|
+
instance.webContents.once('did-finish-load', () => {
|
|
149
|
+
resolve(instance);
|
|
150
|
+
});
|
|
151
|
+
instance.webContents.once('did-fail-load', () => {
|
|
152
|
+
resolve(instance);
|
|
153
|
+
});
|
|
154
|
+
instance.loadURL(url || 'about:blank');
|
|
128
155
|
}
|
|
129
|
-
// @ts-ignore
|
|
130
|
-
log('log', '创建预BW: ', instance._id);
|
|
131
|
-
instance.webContents.once('did-finish-load', () => {
|
|
132
|
-
resolve(instance);
|
|
133
|
-
});
|
|
134
|
-
instance.webContents.once('did-fail-load', () => {
|
|
135
|
-
resolve(instance);
|
|
136
|
-
});
|
|
137
|
-
instance.loadURL(url || 'about:blank');
|
|
138
156
|
});
|
|
139
157
|
}
|
|
140
158
|
_createPreloadBV() {
|
|
@@ -189,7 +207,7 @@ class WindowsManager {
|
|
|
189
207
|
options.type = type;
|
|
190
208
|
// 优先复用预创建实例
|
|
191
209
|
let preloadWin = null;
|
|
192
|
-
if (type === 'BW' && usePreload) {
|
|
210
|
+
if (type === 'BW' && usePreload && this.preloadWebContentsUrl) {
|
|
193
211
|
const bwOptions = browserWindowOptions || {};
|
|
194
212
|
if (bwOptions.frame === false && bwOptions.titleBarStyle === 'hidden') {
|
|
195
213
|
preloadWin = this.preloadedBW_FramelessWithButtons;
|
|
@@ -207,7 +225,7 @@ class WindowsManager {
|
|
|
207
225
|
setTimeout(() => this._createPreloadBW({}), 0);
|
|
208
226
|
}
|
|
209
227
|
}
|
|
210
|
-
if (type === 'BV' && usePreload) {
|
|
228
|
+
if (type === 'BV' && usePreload && this.preloadWebContentsUrl) {
|
|
211
229
|
preloadWin = this.preloadedBV;
|
|
212
230
|
this.preloadedBV = null;
|
|
213
231
|
setTimeout(() => this._createPreloadBV(), 0);
|
|
@@ -387,31 +405,93 @@ class WindowsManager {
|
|
|
387
405
|
window.focus ? window.focus() : window.webContents.focus();
|
|
388
406
|
this.windows.set(window.id || window._id || window.webContents.id, window);
|
|
389
407
|
log('log', 'create', this.windows.keys());
|
|
390
|
-
const initVal = () => {
|
|
391
|
-
window.webContents.executeJavaScript(`
|
|
392
|
-
try {
|
|
393
|
-
const data = {
|
|
394
|
-
__ELECTRON_WINDOW_MANAGER_WEB_CONTENTS_ID__: ${JSON.stringify(window.webContents.id)},
|
|
395
|
-
__ELECTRON_WINDOW_MANAGER_TYPE__: ${JSON.stringify(window._type)},
|
|
396
|
-
__ELECTRON_WINDOW_MANAGER_NAME__: ${JSON.stringify(window._name)},
|
|
397
|
-
__ELECTRON_WINDOW_MANAGER_EXTRA_DATA__: ${JSON.stringify(window._extraData || '')},
|
|
398
|
-
__ELECTRON_WINDOW_MANAGER_PRELOAD__: ${JSON.stringify(preload)}
|
|
399
|
-
};
|
|
400
|
-
Object.entries(data).forEach(([key, value]) => {
|
|
401
|
-
Object.defineProperty(window, key, {
|
|
402
|
-
value,
|
|
403
|
-
writable: false,
|
|
404
|
-
configurable: false,
|
|
405
|
-
enumerable: true
|
|
406
|
-
});
|
|
407
|
-
});
|
|
408
|
-
} catch (error) {}
|
|
409
|
-
`);
|
|
410
|
-
};
|
|
411
408
|
// 初始化值
|
|
412
409
|
window.webContents.on('did-finish-load', () => {
|
|
413
|
-
|
|
410
|
+
console.error('did-finish-load', window.webContents.id);
|
|
411
|
+
initWebContentsVal(window, `${preload || ''}`);
|
|
414
412
|
});
|
|
413
|
+
if (type === 'BW') {
|
|
414
|
+
const handleBrowserViewFocus = (view) => {
|
|
415
|
+
try {
|
|
416
|
+
view.webContents?.focus();
|
|
417
|
+
view.webContents?.executeJavaScript(`
|
|
418
|
+
try {
|
|
419
|
+
window.dispatchEvent(new Event('focus'));
|
|
420
|
+
} catch (error) {
|
|
421
|
+
console.error('focus', error);
|
|
422
|
+
}
|
|
423
|
+
`);
|
|
424
|
+
}
|
|
425
|
+
catch (error) {
|
|
426
|
+
log('error', 'handleBrowserViewFocus', error);
|
|
427
|
+
}
|
|
428
|
+
};
|
|
429
|
+
const handleBrowserViewBlur = (view) => {
|
|
430
|
+
try {
|
|
431
|
+
view.webContents?.executeJavaScript(`
|
|
432
|
+
try {
|
|
433
|
+
window.dispatchEvent(new Event('blur'));
|
|
434
|
+
} catch (error) {
|
|
435
|
+
console.error('blur', error);
|
|
436
|
+
}
|
|
437
|
+
`);
|
|
438
|
+
}
|
|
439
|
+
catch (error) {
|
|
440
|
+
log('error', 'handleBrowserViewBlur', error);
|
|
441
|
+
}
|
|
442
|
+
};
|
|
443
|
+
window.on('focus', () => {
|
|
444
|
+
try {
|
|
445
|
+
if (typeof window.getBrowserViews === 'function') {
|
|
446
|
+
const views = window.getBrowserViews() || [];
|
|
447
|
+
for (const view of views) {
|
|
448
|
+
handleBrowserViewFocus(view);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
catch (error) {
|
|
453
|
+
log('error', 'focus', error);
|
|
454
|
+
}
|
|
455
|
+
});
|
|
456
|
+
window.on('blur', () => {
|
|
457
|
+
try {
|
|
458
|
+
if (typeof window.getBrowserViews === 'function') {
|
|
459
|
+
const views = window.getBrowserViews();
|
|
460
|
+
for (const view of views) {
|
|
461
|
+
handleBrowserViewBlur(view);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
catch (error) {
|
|
466
|
+
log('error', 'focus', error);
|
|
467
|
+
}
|
|
468
|
+
});
|
|
469
|
+
// try {
|
|
470
|
+
// const _addBrowserView = window.addBrowserView;
|
|
471
|
+
// window.addBrowserView = (view: BrowserView) => {
|
|
472
|
+
// _addBrowserView.call(window, view);
|
|
473
|
+
// handleBrowserViewFocus(view)
|
|
474
|
+
// }
|
|
475
|
+
// const _removeBrowserView = window.removeBrowserView;
|
|
476
|
+
// window.removeBrowserView = (view: BrowserView) => {
|
|
477
|
+
// _removeBrowserView.call(window, view);
|
|
478
|
+
// handleBrowserViewBlur(view)
|
|
479
|
+
// }
|
|
480
|
+
// const _setBrowserView = window.setBrowserView;
|
|
481
|
+
// window.setBrowserView = (view: BrowserView) => {
|
|
482
|
+
// const views = window.getBrowserViews() || [];
|
|
483
|
+
// for (const view of views) {
|
|
484
|
+
// handleBrowserViewBlur(view)
|
|
485
|
+
// }
|
|
486
|
+
// setTimeout(() => {
|
|
487
|
+
// _setBrowserView.call(window, view);
|
|
488
|
+
// handleBrowserViewFocus(view);
|
|
489
|
+
// }, 0);
|
|
490
|
+
// }
|
|
491
|
+
// } catch (error) {
|
|
492
|
+
// log('error', 'focus', error);
|
|
493
|
+
// }
|
|
494
|
+
}
|
|
415
495
|
}
|
|
416
496
|
catch (error) {
|
|
417
497
|
log('error', 'create', error);
|
|
@@ -605,6 +685,40 @@ class WindowsManager {
|
|
|
605
685
|
}
|
|
606
686
|
});
|
|
607
687
|
}
|
|
688
|
+
rename(idOrName, newName) {
|
|
689
|
+
log('log', 'rename', idOrName, newName);
|
|
690
|
+
let win = undefined;
|
|
691
|
+
// 先查找目标窗口
|
|
692
|
+
if (typeof idOrName === 'number') {
|
|
693
|
+
win = this.get(idOrName);
|
|
694
|
+
}
|
|
695
|
+
else if (typeof idOrName === 'string') {
|
|
696
|
+
this.windows.forEach(i => {
|
|
697
|
+
if (i?._name === idOrName) {
|
|
698
|
+
win = i;
|
|
699
|
+
}
|
|
700
|
+
});
|
|
701
|
+
}
|
|
702
|
+
if (!win) {
|
|
703
|
+
// 没有找到目标窗口
|
|
704
|
+
return undefined;
|
|
705
|
+
}
|
|
706
|
+
// 检查新名字是否已存在
|
|
707
|
+
let nameExists = false;
|
|
708
|
+
this.windows.forEach(i => {
|
|
709
|
+
if (i !== win && i?._name === newName) {
|
|
710
|
+
nameExists = true;
|
|
711
|
+
}
|
|
712
|
+
});
|
|
713
|
+
if (nameExists) {
|
|
714
|
+
// 新名字已被占用
|
|
715
|
+
return undefined;
|
|
716
|
+
}
|
|
717
|
+
// 修改名字并同步 webContents
|
|
718
|
+
win._name = newName;
|
|
719
|
+
initWebContentsVal(win, `${this.preload || ''}`);
|
|
720
|
+
return win;
|
|
721
|
+
}
|
|
608
722
|
getPreload() {
|
|
609
723
|
log('log', 'getPreload');
|
|
610
724
|
return this.preload;
|
|
@@ -741,6 +855,19 @@ const initialize = (preload, loadingViewUrl, errorViewUrl, preloadWebContentsUrl
|
|
|
741
855
|
const res = wm.closeAll();
|
|
742
856
|
return res;
|
|
743
857
|
}
|
|
858
|
+
if (data?.type === 'rename') {
|
|
859
|
+
const opt = data;
|
|
860
|
+
const res = wm.rename(opt.data.idOrName, opt.data.newName);
|
|
861
|
+
if (res) {
|
|
862
|
+
return {
|
|
863
|
+
winId: Number(`${res?.id || res?._id || -1}`),
|
|
864
|
+
winName: `${res?._name || ''}`,
|
|
865
|
+
winType: `${res?._type || ''}`,
|
|
866
|
+
winExtraData: `${res?._extraData || ''}`,
|
|
867
|
+
};
|
|
868
|
+
}
|
|
869
|
+
return undefined;
|
|
870
|
+
}
|
|
744
871
|
if (data?.type === 'getWindowForWebContentId') {
|
|
745
872
|
const opt = data;
|
|
746
873
|
const targetWebContents = electron.webContents.fromId(opt.data);
|