@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.
@@ -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;
@@ -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;AAED,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;IAyCxB,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;IAoQ/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,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,cA8N7H,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
- const n = Object.create(null);
9
- if (e) {
10
- for (const k in e) {
11
- n[k] = e[k];
12
- }
8
+ const n = Object.create(null);
9
+ if (e) {
10
+ for (const k in e) {
11
+ n[k] = e[k];
13
12
  }
14
- n.default = e;
15
- return n;
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
- const instance = new electron.BrowserWindow({
103
- show: false,
104
- ...options,
105
- webPreferences: {
106
- webviewTag: true,
107
- plugins: true,
108
- nodeIntegration: true,
109
- contextIsolation: false,
110
- backgroundThrottling: false,
111
- webSecurity: false,
112
- preload: preload,
113
- ...(options.webPreferences || {}),
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
- instance._id = instance.webContents.id;
125
- }
126
- catch (error) {
127
- log('error', '预加载 BW 设置 _id 失败', error);
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
- initVal();
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);