@lynker-desktop/electron-window-manager 0.0.9-alpha.77 → 0.0.9-alpha.78
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 +6 -1
- package/esm/main/index.d.ts.map +1 -1
- package/esm/main/index.js +51 -2
- package/esm/main/index.js.map +1 -1
- package/main/index.d.ts +6 -1
- package/main/index.d.ts.map +1 -1
- package/main/index.js +51 -2
- package/main/index.js.map +1 -1
- package/package.json +2 -2
package/esm/main/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/main/index.ts"],"sourcesContent":["import lodash from 'lodash'\nimport { app, BrowserWindow, BrowserView, WebContents, BrowserWindowConstructorOptions, session, Session, webContents, BrowserViewConstructorOptions } from 'electron'\nimport * as remote from '@electron/remote/main'\nimport eIpc from '@lynker-desktop/electron-ipc/main'\nimport md5 from 'md5'\nimport type { ElectronWindowsManagerOptions, BWItem, BVItem, PreloadWebContentsConfig } from '../common';\nimport PQueue from 'p-queue'\n\nconst getQueue = (() => {\n let queue: PQueue;\n return async () => {\n if (!queue) {\n // const { default: PQueue } = await import('p-queue')\n queue = new PQueue({ concurrency: 1 });\n }\n return queue;\n }\n})();\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\nconst initWebContentsVal = (win: BWItem | BVItem, preload: string) => {\n try {\n if (!win?.webContents || win.webContents.isDestroyed()) {\n return;\n }\n const webContentsId = win.webContents.id;\n win.webContents.executeJavaScript(`\n try {\n const data = {\n __ELECTRON_WINDOW_MANAGER_WEB_CONTENTS_ID__: ${JSON.stringify(webContentsId)},\n __ELECTRON_WINDOW_MANAGER_TYPE__: ${JSON.stringify(win._type)},\n __ELECTRON_WINDOW_MANAGER_NAME__: ${JSON.stringify(win._name)},\n __ELECTRON_WINDOW_MANAGER_EXTRA_DATA__: ${JSON.stringify(win._extraData || '')},\n __ELECTRON_WINDOW_MANAGER_PRELOAD__: ${JSON.stringify(preload)},\n __ELECTRON_WINDOW_MANAGER_INIT_URL__: ${JSON.stringify(win._initUrl || '')}\n };\n Object.entries(data).forEach(([key, value]) => {\n window[key] = value;\n });\n } catch (error) {}\n `)\n } catch (error) {\n // 忽略错误,webContents 可能已销毁\n }\n}\n\nexport class WindowsManager {\n loadingViewUrl: string | undefined;\n errorViewUrl: string | undefined;\n preload?: string;\n // 预加载的webContents配置\n preloadWebContentsConfig?: PreloadWebContentsConfig;\n windows: Map<number, BWItem | BVItem>;\n // 按名称索引的 Map,用于加速查找\n windowsByName: Map<string, number> = new Map();\n // 预加载的窗口\n preloadedBW: BWItem | null = null;\n // 预加载的窗口(无边框,有按钮)\n preloadedBW_FramelessWithButtons: BWItem | null = null;\n // 预加载的窗口(无边框,无按钮)\n preloadedBW_FramelessNoButtons: BWItem | null = null;\n // 预加载的浏览器视图\n preloadedBV: BVItem | null = null;\n preloading: boolean = false;\n webviewDomainWhiteList: string[] = [];\n // 窗口销毁检查的防抖函数,避免频繁检查\n private cleanupDestroyedWindowsDebounced = lodash.debounce(() => {\n this._cleanupDestroyedWindows();\n }, 500);\n /**\n * webview 域名白名单\n * 传入格式示例:\n * [\n * 'example.com', // 精确匹配 example.com\n * '.example.com', // 匹配所有 example.com 的子域名,如 a.example.com、b.example.com\n * 'sub.domain.com', // 精确匹配 sub.domain.com\n * 'localhost', // 匹配 localhost 及本地回环地址\n * '127.0.0.1', // 匹配 127.0.0.1\n * '::1' // 匹配 IPv6 本地回环\n * ]\n * 注意:\n * - 以点开头的(如 .example.com)会匹配所有子域名。\n * - 不带点的(如 example.com)只匹配主域名。\n * - 'localhost'、'127.0.0.1'、'::1' 以及局域网 IP(如 192.168.x.x、10.x.x.x、172.16.x.x~172.31.x.x)都视为本地白名单。\n */\n constructor(preload?: string, loadingViewUrl?: string, errorViewUrl?: string, preloadWebContentsConfig?: PreloadWebContentsConfig, webviewDomainWhiteList?: string[]) {\n this.preload = preload;\n this.windows = new Map();\n this.loadingViewUrl = `${loadingViewUrl ?? ''}`;\n this.errorViewUrl = `${errorViewUrl ?? ''}`;\n this.preloadWebContentsConfig = preloadWebContentsConfig;\n this.webviewDomainWhiteList = webviewDomainWhiteList || [];\n log('log', 'preloadWebContentsConfig: ', this.preloadWebContentsConfig);\n if (this.preloadWebContentsConfig) {\n if (this.preloadWebContentsConfig.nodeIntegration === undefined) {\n this.preloadWebContentsConfig.nodeIntegration = true;\n }\n if (this.preloadWebContentsConfig.contextIsolation === undefined) {\n this.preloadWebContentsConfig.contextIsolation = false;\n }\n getQueue();\n app.whenReady().then(() => {\n if (this.preloadWebContentsConfig) {\n this.setPreloadWebContentsConfig(this.preloadWebContentsConfig);\n }\n });\n }\n }\n\n /**\n * 设置预加载的webContents配置\n * @param preloadWebContentsConfig 预加载的webContents配置\n */\n setPreloadWebContentsConfig(preloadWebContentsConfig: PreloadWebContentsConfig) {\n try {\n this.preloadWebContentsConfig = preloadWebContentsConfig;\n if (this.preloadWebContentsConfig) {\n getQueue().then(q => q.add(async () => {\n return await this._preloadInstances();\n }));\n } else {\n this.preloadedBW = null;\n this.preloadedBW_FramelessWithButtons = null;\n this.preloadedBW_FramelessNoButtons = null;\n this.preloadedBV = null;\n }\n } catch (error) {\n log('error', 'setPreloadWebContentsConfig error:', error);\n }\n }\n\n /**\n * Promise 超时包装函数\n * @param promise 要包装的 Promise\n * @param timeout 超时时间(毫秒)\n * @param errorMessage 超时错误信息\n */\n private async _withTimeout<T>(\n promise: Promise<T>,\n timeout: number,\n errorMessage: string\n ): Promise<T> {\n const timeoutPromise = new Promise<T>((_, reject) => {\n setTimeout(() => {\n reject(new Error(errorMessage));\n }, timeout);\n });\n return Promise.race([promise, timeoutPromise]);\n }\n\n /**\n * 预加载实例\n */\n private async _preloadInstances() {\n if (this.preloading) return;\n this.preloading = true;\n try {\n if (this.preloadWebContentsConfig) {\n log('log', 'preloadWebContentsConfig: ', this.preloadWebContentsConfig);\n const preloadPromises: Promise<any>[] = [];\n\n // 根据配置决定是否预加载普通窗口\n if (this.preloadWebContentsConfig.enableBW !== false && !this.preloadedBW) {\n preloadPromises.push(\n this._createPreloadBW({}).then(i => {\n this.preloadedBW = i;\n log('log', 'init preloadedBW: ', !!this.preloadedBW);\n }).catch(error => {\n log('error', '预加载 BW 失败:', error);\n })\n );\n }\n // 根据配置决定是否预加载无边框有按钮的窗口\n if (this.preloadWebContentsConfig.enableBW_FramelessWithButtons !== false && !this.preloadedBW_FramelessWithButtons) {\n preloadPromises.push(\n this._createPreloadBW({\n frame: false,\n autoHideMenuBar: true,\n titleBarStyle: 'hidden',\n }).then(i => {\n this.preloadedBW_FramelessWithButtons = i;\n log('log', 'init preloadedBW_FramelessWithButtons: ', !!this.preloadedBW_FramelessWithButtons);\n }).catch(error => {\n log('error', '预加载 BW_FramelessWithButtons 失败:', error);\n })\n );\n }\n // 根据配置决定是否预加载无边框无按钮的窗口\n if (this.preloadWebContentsConfig.enableBW_FramelessNoButtons !== false && !this.preloadedBW_FramelessNoButtons) {\n preloadPromises.push(\n this._createPreloadBW({\n frame: false,\n autoHideMenuBar: true,\n titleBarStyle: 'default',\n }).then(i => {\n this.preloadedBW_FramelessNoButtons = i;\n log('log', 'init preloadedBW_FramelessNoButtons: ', !!this.preloadedBW_FramelessNoButtons);\n }).catch(error => {\n log('error', '预加载 BW_FramelessNoButtons 失败:', error);\n })\n );\n }\n // 根据配置决定是否预加载浏览器视图\n if (this.preloadWebContentsConfig.enableBV !== false && !this.preloadedBV) {\n preloadPromises.push(\n this._createPreloadBV().then(i => {\n this.preloadedBV = i;\n log('log', 'init preloadedBV: ', !!this.preloadedBV);\n }).catch(error => {\n log('error', '预加载 BV 失败:', error);\n })\n );\n }\n\n if (preloadPromises.length > 0) {\n // 添加超时机制,默认 10 秒超时\n const timeout = 10000; // 10 秒\n try {\n await this._withTimeout(\n Promise.allSettled(preloadPromises),\n timeout,\n `预加载超时(${timeout}ms)`\n );\n } catch (error) {\n log('error', '预加载超时:', error);\n // 超时后继续执行,不阻塞后续流程\n }\n }\n }\n } catch (e) {\n log('error', '预创建实例失败', e);\n }\n this.preloading = false;\n }\n\n /**\n * 创建预加载的窗口\n * @param options 窗口选项\n * @returns 预加载的窗口\n */\n private _createPreloadBW(options: Partial<BrowserWindowConstructorOptions> = {}): Promise<BWItem> {\n return new Promise((resolve) => {\n const preload = this.preload;\n const url = this.preloadWebContentsConfig?.url;\n if (this.preloadWebContentsConfig?.url) {\n const webPreferences = (options.webPreferences || {});\n const instance = new BrowserWindow({\n useContentSize: true,\n show: false,\n backgroundColor: '#ffffff',\n ...options,\n webPreferences: {\n ...webPreferences,\n sandbox: false,\n webviewTag: true,\n plugins: true,\n nodeIntegration: this.preloadWebContentsConfig?.nodeIntegration ?? true,\n contextIsolation: this.preloadWebContentsConfig?.contextIsolation ?? false,\n backgroundThrottling: false,\n webSecurity: false,\n preload: webPreferences.preload || preload,\n defaultEncoding: 'utf-8',\n }\n });\n try {\n remote.enable(instance.webContents);\n } catch (error) {\n log('error', '预加载 BW 设置 remote 失败', error);\n }\n try {\n const webContentsId = instance.webContents?.id;\n if (webContentsId !== undefined) {\n // @ts-ignore\n instance._id = webContentsId;\n }\n } catch (error) {\n log('error', '预加载 BW 设置 _id 失败', error);\n }\n // @ts-ignore\n const webContentsId = instance.webContents?.id;\n log('log', '创建预BW: ', webContentsId, this.preloadWebContentsConfig?.url);\n // instance.webContents.once('did-finish-load', () => {\n // resolve(instance as BWItem);\n // });\n // instance.webContents.once('did-fail-load', () => {\n // resolve(instance as BWItem);\n // });\n // @ts-ignore\n instance.loadURL(url ? `${url}` : 'about:blank');\n resolve(instance as BWItem);\n } else {\n resolve(null as any);\n }\n });\n }\n\n /**\n * 创建预加载的浏览器视图\n * @returns 预加载的浏览器视图\n */\n private _createPreloadBV(options: Partial<BrowserViewConstructorOptions> = {}): Promise<BVItem> {\n return new Promise((resolve) => {\n const preload = this.preload;\n const url = this.preloadWebContentsConfig?.url;\n if (this.preloadWebContentsConfig?.url) {\n const webPreferences = (options.webPreferences || {});\n const instance = new BrowserView({\n webPreferences: {\n ...webPreferences,\n sandbox: false,\n webviewTag: true,\n plugins: true,\n nodeIntegration: this.preloadWebContentsConfig?.nodeIntegration ?? true,\n contextIsolation: this.preloadWebContentsConfig?.contextIsolation ?? false,\n // backgroundThrottling: false,\n webSecurity: false,\n preload: webPreferences.preload || preload,\n defaultEncoding: 'utf-8',\n }\n });\n try {\n remote.enable(instance.webContents);\n } catch (error) {\n log('error', '预加载 BV 设置 remote 失败', error);\n }\n try {\n const webContentsId = instance.webContents?.id;\n if (webContentsId !== undefined) {\n // @ts-ignore\n instance._id = webContentsId;\n }\n // 设置默认zIndex层级\n (instance as BVItem)._zIndex = 0;\n } catch (error) {\n log('error', '预加载 BV 设置 _id 失败', error);\n }\n // @ts-ignore\n const webContentsId = instance.webContents?.id;\n log('log', '创建预BV: ', webContentsId, this.preloadWebContentsConfig?.url);\n // instance.webContents.once('did-finish-load', () => {\n // resolve(instance as BVItem);\n // });\n // instance.webContents.once('did-fail-load', () => {\n // resolve(instance as BVItem);\n // });\n // @ts-ignore\n instance.webContents.loadURL(url || 'about:blank');\n resolve(instance as BVItem);\n } else {\n resolve(null as any);\n }\n });\n }\n\n // 方法重载声明\n async create(options: Omit<ElectronWindowsManagerOptions, 'type'> & { type?: 'BW' }): Promise<BWItem>;\n async create(options: ElectronWindowsManagerOptions & { type: 'BV' }): Promise<BVItem>;\n async create(options: ElectronWindowsManagerOptions): Promise<BVItem | BWItem>;\n\n async create(options: ElectronWindowsManagerOptions): Promise<BVItem | BWItem> {\n const queue = await getQueue();\n const win = await queue.add(async() => {\n const window = await this._createWindow(options);\n return window;\n })\n return win\n }\n\n /**\n * 实际的窗口创建逻辑\n */\n private async _createWindow(options: ElectronWindowsManagerOptions): Promise<BVItem | BWItem> {\n let window: any;\n const {\n usePreload = true,\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 zIndex = 0,\n } = options;\n const existingWinId = this.windowsByName.get(options.name);\n if (existingWinId) {\n window = this.windows.get(existingWinId);\n if (window) {\n return window;\n }\n // 清理无效的引用\n this.windowsByName.delete(options.name);\n }\n options.type = type;\n // 优先复用预创建实例\n let preloadWin: BWItem | BVItem | null = null;\n if (type === 'BW' && usePreload && this.preloadWebContentsConfig?.url) {\n const bwOptions = (browserWindowOptions as import('../common').BrowserWindowType) || {};\n if (bwOptions.frame === false) {\n if (bwOptions.titleBarStyle === 'default' || !bwOptions.titleBarStyle) {\n if (this.preloadWebContentsConfig.enableBW_FramelessNoButtons !== false && this.preloadedBW_FramelessNoButtons) {\n preloadWin = this.preloadedBW_FramelessNoButtons;\n this.preloadedBW_FramelessNoButtons = await this._createPreloadBW({\n frame: false,\n // transparent: true,\n titleBarStyle: 'default',\n webPreferences: {\n preload: bwOptions?.webPreferences?.preload || this.preload,\n }\n })\n }\n } else {\n if (this.preloadWebContentsConfig.enableBW_FramelessWithButtons !== false && this.preloadedBW_FramelessWithButtons) {\n preloadWin = this.preloadedBW_FramelessWithButtons;\n this.preloadedBW_FramelessWithButtons = await this._createPreloadBW({\n frame: false,\n // transparent: true,\n titleBarStyle: 'hidden',\n webPreferences: {\n preload: this.preload,\n }\n })\n }\n }\n } else {\n if (this.preloadWebContentsConfig.enableBW !== false && this.preloadedBW) {\n preloadWin = this.preloadedBW;\n this.preloadedBW = await this._createPreloadBW({\n webPreferences: {\n preload: bwOptions?.webPreferences?.preload || this.preload,\n }\n })\n }\n }\n }\n if (type === 'BV' && usePreload && this.preloadWebContentsConfig?.url) {\n const bvOptions = (browserWindowOptions as import('../common').BrowserViewType) || {};\n if (this.preloadWebContentsConfig.enableBV !== false && this.preloadedBV) {\n preloadWin = this.preloadedBV;\n this.preloadedBV = await this._createPreloadBV({\n webPreferences: {\n preload: bvOptions?.webPreferences?.preload || this.preload,\n }\n })\n }\n }\n if (preloadWin) {\n const win = preloadWin;\n log('log', `${name} 使用预加载窗口(${type})`, this._getWebContentsId(win));\n win._type = type;\n win._name = options.name || 'anonymous';\n win._extraData = `${options?.extraData || ''}`;\n win._initUrl = `${options?.url || ''}`;\n // @ts-ignore\n // win?.removeAllListeners && win?.removeAllListeners?.();\n // win.webContents.removeAllListeners && win.webContents.removeAllListeners();\n if (type === 'BW') {\n // @ts-ignore\n this._applyBrowserWindowOptions(win as BWItem, options);\n }\n if (type === 'BV') {\n this._applyBrowserViewOptions(win as BVItem, options);\n }\n if (typeof this.preloadWebContentsConfig?.customLoadURL === 'function') {\n try {\n if (type === 'BW') {\n // @ts-ignore\n const originLoadURL = win.loadURL;\n // @ts-ignore\n win.loadURL = async (url: string, useNativeLoadURL = false) => {\n return new Promise(async (resolve, reject) => {\n if (useNativeLoadURL) {\n log('log', 'useNativeLoadURL win.loadURL');\n try {\n await originLoadURL.call(win, url);\n resolve(undefined);\n } catch (error) {\n reject(error);\n }\n return;\n }\n try {\n log('log', 'customLoadURL win.loadURL');\n // @ts-ignore\n await this.preloadWebContentsConfig.customLoadURL(url || 'about:blank', (url) => originLoadURL.call(win, url), win.webContents);\n try {\n (win as BWItem).emit('ready-to-show');\n } catch (error) {\n log('error', 'emit ready-to-show event failed:', error);\n }\n resolve(undefined)\n } catch (error) {\n reject(error);\n }\n })\n\n }\n }\n const originWebContentsLoadURL = win.webContents.loadURL;\n // @ts-ignore\n win.webContents.loadURL = async (url: string, useNativeLoadURL = false) => {\n return new Promise(async (resolve, reject) => {\n if (useNativeLoadURL) {\n log('log', 'useNativeLoadURL win.webContents.loadURL');\n try {\n await originWebContentsLoadURL.call(win.webContents, url);\n resolve(undefined);\n } catch (error) {\n reject(error);\n }\n return;\n }\n try {\n log('log', 'customLoadURL win.webContents.loadURL');\n // @ts-ignore\n await this.preloadWebContentsConfig.customLoadURL(url || 'about:blank', (url) => originWebContentsLoadURL.call(win.webContents, url), win.webContents);\n try {\n (win as BVItem).webContents.emit('ready-to-show');\n } catch (error) {\n log('error', 'emit ready-to-show event failed:', error);\n }\n resolve(undefined);\n } catch (error) {\n reject(error);\n }\n })\n }\n } catch (error) {\n log('error', 'customLoadURL error', error);\n }\n }\n window = win;\n }\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 try {\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 const preload = browserWindowOptions?.webPreferences?.preload || this.preload;\n if (!window) {\n window = type === 'BV' ?\n new BrowserView(\n lodash.merge(\n (browserWindowOptions || {}),\n {\n webPreferences: lodash.merge({\n sandbox: false,\n webviewTag: true,\n // session: getCustomSession(),\n plugins: true,\n nodeIntegration: true,\n contextIsolation: false,\n // fix bv二次挂载会灰屏\n // backgroundThrottling: false,\n nativeWindowOpen: true,\n webSecurity: false,\n preload: preload,\n defaultEncoding: 'utf-8',\n }, browserWindowOptions?.webPreferences || {})\n },\n )\n ) as BVItem\n : new BrowserWindow(\n lodash.merge(\n {\n acceptFirstMouse: true,\n },\n (browserWindowOptions || {}),\n {\n parent: parentWin,\n webPreferences: lodash.merge({\n sandbox: false,\n webviewTag: true,\n // session: getCustomSession(),\n plugins: true,\n nodeIntegration: true,\n contextIsolation: false,\n backgroundThrottling: false,\n nativeWindowOpen: true,\n webSecurity: false,\n preload: preload,\n defaultEncoding: 'utf-8',\n }, browserWindowOptions?.webPreferences || {})\n },\n )\n ) as BWItem;\n log('log', `${name} 不使用 ${type === 'BV' ? 'preloadedBV' : 'preloadedBW'}`, window?.webContents?.id);\n try {\n remote.enable(window.webContents);\n } catch (error) {\n log('error', 'enable: ', error)\n }\n }\n // 停止加载\n // window.webContents?.stop?.();\n // @ts-ignore\n // @ts-ignore\n try {\n const webContentsId = this._getWebContentsId(window);\n if (webContentsId !== undefined) {\n window._id = Number(`${webContentsId}`);\n }\n } catch (error) {\n // log('error', 'set id: ', error)\n }\n\n window._type = type;\n window._name = name;\n window._extraData = `${options?.extraData || ''}`;\n window._initUrl = `${options?.url || ''}`;\n // 设置zIndex层级\n window._zIndex = options.zIndex ?? 0;\n log('log', 'create 5: ', this._getWebContentsId(window), window._name);\n if (loadingView?.url && loadingView?.url !== 'about:blank') {\n if (type === 'BW') {\n // @ts-ignore\n this._setLoadingView(window, options);\n }\n }\n if (errorView?.url && errorView?.url !== 'about:blank') {\n if (type === 'BW') {\n const showErrorView = lodash.debounce(() => {\n const _url = window._initUrl;\n /**\n * 判断是否是错误视图\n */\n const isErrorView = `${_url}`.toUpperCase().startsWith(`${errorView?.url}`.toUpperCase());\n if (!isErrorView && _url) {\n // @ts-ignore\n window.loadURL ? window.loadURL(`${errorView?.url}`) : window.webContents.loadURL(`${errorView?.url}`);\n window.webContents.executeJavaScript(`\n var key = '__ELECTRON_WINDOW_MANAGER_DID_FAIL_LOAD_URL__';\n window[key] = \"${_url}\";\n sessionStorage.setItem(key, \"${_url}\");\n `);\n }\n }, 1000);\n // @ts-ignore\n window.webContents.on('did-fail-load', (event, errorCode, errorDescription, validatedURL, isMainFrame) => {\n if (isMainFrame) {\n showErrorView();\n }\n });\n // 当开始加载时取消错误视图\n window.webContents.on('did-start-loading', () => {\n showErrorView.cancel();\n });\n // 当导航开始时取消错误视图\n window.webContents.on('did-start-navigation', () => {\n showErrorView.cancel();\n });\n // 当页面重新加载时取消错误视图\n window.webContents.on('did-navigate', () => {\n showErrorView.cancel();\n });\n // 当页面完成加载时取消错误视图\n window.webContents.on('did-finish-load', () => {\n showErrorView.cancel();\n });\n // 当窗口关闭时取消错误视图\n window.webContents.on('close', () => {\n showErrorView.cancel();\n });\n // 当窗口销毁时取消错误视图\n window.webContents.on('destroyed', () => {\n showErrorView.cancel();\n });\n }\n }\n window.webContents.on('did-attach-webview', (_event: any, webContents: any) => {\n const tryEnable = () => {\n try {\n const url = webContents.getURL();\n if (!url || url === 'about:blank') {\n return;\n }\n\n if (this.webviewDomainWhiteList && this.webviewDomainWhiteList.length > 0) {\n try {\n const { hostname } = new URL(url);\n // 优化白名单判断,支持 .example.com 形式的子域名通配和本地/内网IP\n const isWhiteListed = this.webviewDomainWhiteList.some(domain => {\n if (domain === 'localhost' || domain === '127.0.0.1' || domain === '::1') {\n return this._isLocalhost(hostname);\n }\n if (domain.startsWith('.')) {\n // .example.com 允许所有 *.example.com\n return hostname === domain.slice(1) || hostname.endsWith(domain);\n } else {\n // 精确匹配\n return hostname === domain;\n }\n }) || this._isLocalhost(hostname); // 允许本地回环和内网地址\n\n if (isWhiteListed) {\n enable(webContents);\n } else {\n log('log', 'webview 域名未在白名单,未启用 remote', url);\n }\n } catch {\n log('log', 'webview url 解析失败,未启用 remote', url);\n }\n } else {\n enable(webContents); // 没有配置白名单则全部允许\n }\n } catch (error) {\n log('error', 'tryEnable webview error:', error);\n }\n };\n // 只监听一次,防止多次触发\n const onDidNavigate = () => {\n tryEnable();\n webContents.removeListener('did-navigate', onDidNavigate);\n webContents.removeListener('did-finish-load', onDidNavigate);\n };\n webContents.on('did-navigate', onDidNavigate);\n webContents.on('did-finish-load', onDidNavigate);\n });\n // window.webContents.on('close', () => {\n // this.windows.delete(window.id || window._id)\n // })\n window.webContents.on('destroyed', () => {\n const winId = this._getWebContentsId(window);\n if (winId !== undefined) {\n this.windows.delete(winId);\n }\n // 同步清理名称索引\n this.windowsByName.delete(window._name);\n })\n window.webContents.on('dom-ready', () => {\n if (openDevTools) {\n window.webContents.openDevTools();\n }\n });\n if (type === 'BW') {\n // @ts-ignore\n if (options.browserWindow?.show !== false) {\n window.show()\n }\n // @ts-ignore\n window.on('closed', () => {\n const winId = this._getWebContentsId(window);\n log('log', 'closed', winId, window._name);\n if (winId !== undefined) {\n this.windows.delete(winId);\n }\n // 同步清理名称索引\n this.windowsByName.delete(window._name);\n });\n }\n if (type === 'BV') {\n parentWin?.addBrowserView(window);\n log('log', 'create - addBrowserView')\n }\n\n const winId = this._getWebContentsId(window);\n if (winId !== undefined) {\n this.windows.set(winId, window);\n // 同步更新名称索引\n this.windowsByName.set(window._name, winId);\n }\n log('log', 'create', this.windows.keys())\n\n // 初始化值\n window.webContents.on('did-finish-load', () => {\n log('log', 'did-finish-load', this._getWebContentsId(window));\n initWebContentsVal(window, `${preload || ''}`);\n })\n window.webContents.on('did-start-loading', () => {\n log('log', 'did-start-loading', this._getWebContentsId(window));\n initWebContentsVal(window, `${preload || ''}`);\n })\n if (type === 'BW') {\n const handleBrowserViewFocus = (view: BrowserView) => {\n try {\n view.webContents?.focus();\n view.webContents?.executeJavaScript(`\n try {\n window.dispatchEvent(new Event('focus'));\n } catch (error) {\n // 忽略错误,避免影响主流程\n }\n `)\n } catch (error) {\n log('error', 'handleBrowserViewFocus', error);\n }\n }\n const handleBrowserViewBlur = (view: BrowserView) => {\n try {\n view.webContents?.executeJavaScript(`\n try {\n window.dispatchEvent(new Event('blur'));\n } catch (error) {\n // 忽略错误,避免影响主流程\n }\n `)\n } catch (error) {\n log('error', 'handleBrowserViewBlur', error);\n }\n }\n window.on('focus', () => {\n try {\n if (typeof window.getBrowserViews === 'function') {\n const views = (window as BrowserWindow).getBrowserViews() || [];\n for (const view of views) {\n handleBrowserViewFocus(view)\n }\n }\n } catch (error) {\n log('error', 'focus', error);\n }\n });\n window.on('blur', () => {\n try {\n if (typeof window.getBrowserViews === 'function') {\n const views = (window as BrowserWindow).getBrowserViews();\n for (const view of views) {\n handleBrowserViewBlur(view)\n }\n }\n } catch (error) {\n log('error', 'focus', error);\n }\n });\n try {\n const _addBrowserView = window.addBrowserView;\n window.addBrowserView = (view: BrowserView, isSort: boolean = false) => {\n _addBrowserView.call(window, view);\n handleBrowserViewFocus(view);\n // 添加BrowserView后重新排序(如果未禁用自动排序)\n log('log', 'addBrowserView-sort', isSort, window.getBrowserViews());\n if (isSort) {\n this.sortBrowserViewsDebounced(window, view as BVItem);\n }\n }\n const _removeBrowserView = window.removeBrowserView;\n window.removeBrowserView = (view: BrowserView, isSort: boolean = false) => {\n _removeBrowserView.call(window, view);\n handleBrowserViewBlur(view);\n // 移除BrowserView后重新排序(如果未禁用自动排序)\n log('log', 'removeBrowserView-sort', isSort);\n if (isSort) {\n this.sortBrowserViewsDebounced(window, view as BVItem);\n }\n }\n const _setBrowserView = window.setBrowserView;\n window.setBrowserView = (view: BrowserView, isSort: boolean = false) => {\n const views = window.getBrowserViews() || [];\n for (const existingView of views) {\n handleBrowserViewBlur(existingView)\n }\n _setBrowserView.call(window, view);\n handleBrowserViewFocus(view);\n log('log', 'setBrowserView-sort', isSort);\n if (isSort) {\n this.sortBrowserViewsDebounced(window, view as BVItem);\n }\n }\n } catch (error) {\n log('error', 'focus', error);\n }\n }\n\n if (options.url) {\n // @ts-ignore\n window.loadURL ? window.loadURL(options.url) : window.webContents.loadURL(options.url);\n if ((options.browserWindow as Partial<BrowserWindowConstructorOptions>)?.focusable !== false) {\n window?.focus?.();\n }\n window?.webContents?.focus?.();\n }\n } catch (error) {\n log('error', 'create', error)\n throw error;\n }\n\n if (!window) {\n throw new Error(`Failed to create window: ${name}`);\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 sandbox: false,\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.addBrowserView(_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);\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.addBrowserView(_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 /**\n * 检查窗口是否已销毁\n */\n private _isWindowDestroyed(win: BWItem | BVItem): boolean {\n try {\n return !win || !win.webContents || win.webContents.isDestroyed();\n } catch {\n return true;\n }\n }\n\n /**\n * 安全地获取窗口的 webContents.id\n * 如果 webContents 已销毁,返回 undefined\n */\n _getWebContentsId(win: BWItem | BVItem | null | undefined): number | undefined {\n try {\n if (!win || !win.webContents) {\n return undefined;\n }\n if (win.webContents.isDestroyed()) {\n return undefined;\n }\n return win.webContents.id;\n } catch {\n return undefined;\n }\n }\n\n /**\n * 判断是否本地/内网IP\n */\n private _isLocalhost(hostname: string): boolean {\n return (\n hostname === 'localhost' ||\n hostname === '127.0.0.1' ||\n hostname === '::1' ||\n /^192\\.168\\./.test(hostname) ||\n /^10\\./.test(hostname) ||\n /^172\\.(1[6-9]|2[0-9]|3[0-1])\\./.test(hostname)\n );\n }\n\n /**\n * 清理已销毁的窗口(延迟执行,避免频繁检查)\n */\n private _cleanupDestroyedWindows() {\n const toDelete: number[] = [];\n this.windows.forEach((win, key) => {\n if (this._isWindowDestroyed(win)) {\n toDelete.push(key);\n // 同步清理名称索引\n if (win?._name) {\n this.windowsByName.delete(win._name);\n }\n }\n });\n toDelete.forEach(key => this.windows.delete(key));\n }\n\n get(idOrName: string | number): BWItem | BVItem | undefined {\n log('log', 'get', idOrName);\n let win: BWItem | BVItem | undefined;\n\n if (typeof idOrName === 'number') {\n // 按 ID 查找(O(1)),使用 webContents.id\n win = this.windows.get(idOrName);\n } else if (typeof idOrName === 'string') {\n // 按名称查找(O(1),使用索引)\n const winId = this.windowsByName.get(idOrName);\n if (winId !== undefined) {\n win = this.windows.get(winId);\n }\n // 如果索引中找不到,回退到遍历查找(兼容旧数据)\n if (!win) {\n this.windows.forEach(w => {\n if (w._name === idOrName) {\n win = w;\n // 更新索引,使用 webContents.id\n const webContentsId = this._getWebContentsId(w);\n if (webContentsId !== undefined) {\n this.windowsByName.set(idOrName, webContentsId);\n }\n }\n });\n }\n }\n\n // 检查找到的窗口是否已销毁\n if (win && !this._isWindowDestroyed(win)) {\n return win;\n }\n\n // 窗口已销毁,触发清理\n if (win) {\n const winId = this._getWebContentsId(win);\n if (winId !== undefined) {\n this.windows.delete(winId);\n }\n if (win._name) {\n this.windowsByName.delete(win._name);\n }\n }\n\n // 延迟清理其他已销毁的窗口\n this.cleanupDestroyedWindowsDebounced();\n\n return undefined;\n }\n\n getAll(type: 'BW'): Map<number, BWItem>;\n getAll(type: 'BV'): Map<number, BVItem>;\n getAll(): Map<number, BWItem | BVItem>;\n getAll(type?: 'BW' | 'BV'): Map<number, BWItem | BVItem> {\n log('log', 'getAll');\n\n // 先清理已销毁的窗口\n const toDelete: number[] = [];\n this.windows.forEach((win, key) => {\n if (this._isWindowDestroyed(win)) {\n toDelete.push(key);\n if (win?._name) {\n this.windowsByName.delete(win._name);\n }\n }\n });\n toDelete.forEach(key => this.windows.delete(key));\n\n if (!type) {\n return this.windows;\n }\n\n const result = new Map<number, BWItem | BVItem>();\n this.windows.forEach((win, key) => {\n if (!this._isWindowDestroyed(win) && win._type === type) {\n result.set(key, win);\n }\n });\n // 使用类型断言,TypeScript 会通过方法重载确保类型正确\n return result as any;\n }\n\n close(idOrName: string | number) {\n log('log', 'close', idOrName);\n const win = this.get(idOrName);\n\n if (!win) {\n return false;\n }\n\n const winId = this._getWebContentsId(win);\n if (winId !== undefined) {\n this.windows.delete(winId);\n }\n if (win._name) {\n this.windowsByName.delete(win._name);\n }\n\n try {\n if (win._type === 'BV') {\n // 从所有 BW 窗口中移除该 BV\n this.windows.forEach(i => {\n if (i?._type === 'BW' && !this._isWindowDestroyed(i)) {\n const _win = i as BWItem;\n try {\n _win.removeBrowserView(win as BVItem);\n } catch (error) {\n // 忽略错误,可能已经移除\n }\n }\n });\n }\n // @ts-ignore\n win.webContents?.destroy?.();\n // @ts-ignore\n win.close?.();\n // @ts-ignore\n win.destroy?.();\n } catch (error) {\n log('error', 'close window error:', error);\n }\n\n return true;\n }\n\n closeAll() {\n log('log', 'closeAll');\n const windowsToClose = Array.from(this.windows.values());\n // 先清空 Map,避免在遍历过程中修改\n this.windows.clear();\n this.windowsByName.clear();\n\n // 收集所有 BW 窗口,用于批量移除 BV\n const bwWindows = windowsToClose.filter(w => w._type === 'BW' && !this._isWindowDestroyed(w)) as BWItem[];\n const bvWindows = windowsToClose.filter(w => w._type === 'BV') as BVItem[];\n\n // 先从所有 BW 窗口中移除 BV\n bvWindows.forEach(bv => {\n bwWindows.forEach(bw => {\n try {\n bw.removeBrowserView(bv);\n } catch (error) {\n // 忽略错误,可能已经移除\n }\n });\n });\n\n // 然后销毁所有窗口\n windowsToClose.forEach((win) => {\n try {\n if (this._isWindowDestroyed(win)) {\n return;\n }\n // @ts-ignore\n win.webContents?.destroy?.();\n // @ts-ignore\n win.close?.();\n // @ts-ignore\n win.destroy?.();\n } catch (error) {\n log('error', 'closeAll error:', error);\n }\n });\n }\n\n rename(idOrName: string | number, newName: string) {\n log('log', 'rename', idOrName, newName);\n const win = this.get(idOrName);\n\n if (!win) {\n return undefined;\n }\n\n // 检查新名字是否已存在(使用索引加速)\n const existingWinId = this.windowsByName.get(newName);\n if (existingWinId !== undefined) {\n const existingWin = this.windows.get(existingWinId);\n if (existingWin && existingWin !== win && !this._isWindowDestroyed(existingWin)) {\n // 新名字已被占用\n return undefined;\n }\n }\n\n // 更新名称索引\n const oldName = win._name;\n const winId = this._getWebContentsId(win);\n if (winId !== undefined) {\n this.windowsByName.delete(oldName);\n this.windowsByName.set(newName, winId);\n }\n\n // 修改名字并同步 webContents\n win._name = newName;\n initWebContentsVal(win, `${this.preload || ''}`);\n return win;\n }\n\n reInitUrl(idOrName: string | number, url: string): BWItem | BVItem | undefined {\n log('log', 'reInitUrl', idOrName, url);\n const win = this.get(idOrName);\n\n if (!win) {\n return undefined;\n }\n\n win._initUrl = url;\n initWebContentsVal(win, `${this.preload || ''}`);\n return win;\n }\n\n getPreload() {\n log('log', 'getPreload');\n return this.preload;\n }\n\n private _applyBrowserWindowOptions(win: BWItem, options: ElectronWindowsManagerOptions) {\n const browserWindowOptions = options.browserWindow as Partial<BrowserWindowConstructorOptions> || {};\n // 设置父窗口\n if (typeof browserWindowOptions.parent === 'number') {\n const parentWin = BrowserWindow.fromId(browserWindowOptions.parent);\n if (parentWin) {\n win.setParentWindow(parentWin);\n }\n }\n // 设置窗口大小\n if (typeof browserWindowOptions.width === 'number' && typeof browserWindowOptions.height === 'number') {\n win.setBounds({ width: browserWindowOptions.width, height: browserWindowOptions.height });\n }\n // 置顶\n if (typeof browserWindowOptions.alwaysOnTop === 'boolean') {\n win.setAlwaysOnTop(browserWindowOptions.alwaysOnTop);\n }\n // 设置背景颜色\n if (typeof browserWindowOptions.backgroundColor === 'string') {\n win.setBackgroundColor(browserWindowOptions.backgroundColor);\n }\n // 居中\n if (browserWindowOptions?.center !== false) {\n win.center();\n }\n // 设置窗口移动\n if (typeof browserWindowOptions.movable === 'boolean') {\n win.setMovable(browserWindowOptions.movable);\n }\n // 设置窗口大小调整\n if (typeof browserWindowOptions.resizable === 'boolean') {\n win.setResizable(browserWindowOptions.resizable);\n }\n // 设置全屏模式\n if (typeof browserWindowOptions.fullscreenable === 'boolean') {\n win.setFullScreenable(browserWindowOptions.fullscreenable);\n }\n // 设置窗口阴影\n if (typeof browserWindowOptions.hasShadow === 'boolean') {\n win.setHasShadow(browserWindowOptions.hasShadow);\n }\n // 设置窗口最小尺寸\n if (typeof browserWindowOptions.minWidth === 'number' && typeof browserWindowOptions.minHeight === 'number') {\n win.setMinimumSize(browserWindowOptions.minWidth, browserWindowOptions.minHeight);\n }\n // 设置窗口最大尺寸\n if (typeof browserWindowOptions.maxWidth === 'number' && typeof browserWindowOptions.maxHeight === 'number') {\n win.setMaximumSize(browserWindowOptions.maxWidth, browserWindowOptions.maxHeight);\n }\n // 设置窗口位置\n if (typeof browserWindowOptions.x === 'number' && typeof browserWindowOptions.y === 'number') {\n win.setPosition(browserWindowOptions.x, browserWindowOptions.y);\n }\n // 设置窗口标题\n if (typeof browserWindowOptions.title === 'string') {\n win.setTitle(browserWindowOptions.title);\n }\n // 设置窗口图标\n if (typeof browserWindowOptions.icon === 'string') {\n win.setIcon(browserWindowOptions.icon);\n }\n // 设置窗口菜单栏可见性\n if (typeof browserWindowOptions.autoHideMenuBar === 'boolean') {\n win.setAutoHideMenuBar(browserWindowOptions.autoHideMenuBar);\n }\n // 设置窗口最小化按钮\n if (browserWindowOptions.minimizable === false) {\n win.setMinimizable(false);\n }\n // 设置窗口最大化按钮\n if (browserWindowOptions.maximizable === false) {\n win.setMaximizable(false);\n }\n // 设置窗口关闭按钮\n if (browserWindowOptions.closable === false) {\n win.setClosable(false);\n }\n // 设置窗口焦点\n if (browserWindowOptions.focusable === false) {\n win.setFocusable(false);\n }\n // 设置窗口全屏\n if (browserWindowOptions.fullscreen === true) {\n win.setFullScreen(true);\n }\n // 设置窗口背景材质\n if (typeof browserWindowOptions.vibrancy === 'string') {\n win.setVibrancy(browserWindowOptions.vibrancy);\n }\n // 设置窗口透明度\n if (typeof browserWindowOptions.opacity === 'number') {\n win.setOpacity(browserWindowOptions.opacity);\n }\n // 设置窗口显示状态\n if (browserWindowOptions.show === false) {\n win.hide();\n }\n\n // 可继续扩展其他动态属性\n }\n\n private _applyBrowserViewOptions(view: BVItem, options: ElectronWindowsManagerOptions) {\n const browserWindowOptions = options.browserWindow as Partial<BrowserWindowConstructorOptions> || {};\n let parentWin: BrowserWindow | undefined;\n if (typeof browserWindowOptions.parent === 'number') {\n parentWin = BrowserWindow.fromId(browserWindowOptions.parent) || undefined;\n if (parentWin) {\n parentWin.addBrowserView(view);\n }\n }\n // 设置视图大小\n if (typeof browserWindowOptions.width === 'number' && typeof browserWindowOptions.height === 'number') {\n view.setBounds({ x: 0, y: 0, width: browserWindowOptions.width, height: browserWindowOptions.height });\n }\n // 设置视图位置\n if (typeof browserWindowOptions.x === 'number' && typeof browserWindowOptions.y === 'number') {\n const bounds = view.getBounds();\n view.setBounds({\n x: browserWindowOptions.x,\n y: browserWindowOptions.y,\n width: bounds.width,\n height: bounds.height\n });\n }\n // 设置视图背景颜色\n if (typeof browserWindowOptions.backgroundColor === 'string') {\n view.setBackgroundColor(browserWindowOptions.backgroundColor);\n }\n // 可继续扩展其他动态属性\n }\n\n // 生成一个bv 做为预加载资源窗口,加载完成后销毁\n async createPreloadWebContents(url: string) {\n let bv: any = null;\n try {\n bv = await this.create({\n type: 'BV',\n url,\n name: `preload-web-contents-${md5(url)}`,\n extraData: `${url}`\n })\n return new Promise((resolve, reject) => {\n const winId = this._getWebContentsId(bv);\n if (!winId) {\n reject(new Error('Failed to get window ID'));\n return;\n }\n bv.webContents.on('did-finish-load', () => {\n if (winId) {\n this.close(winId);\n }\n resolve(true);\n bv = null;\n })\n bv.webContents.on('did-fail-load', () => {\n if (winId) {\n this.close(winId);\n }\n reject(new Error('Failed to load web contents'));\n bv = null;\n })\n bv.webContents.loadURL(url);\n })\n } catch (error) {\n if (bv) {\n const winId = this._getWebContentsId(bv);\n if (winId) {\n this.close(winId);\n }\n }\n throw error;\n }\n }\n\n async getWindowForWebContentsId(wcId: number): Promise<BWItem | undefined> {\n const wc = webContents.fromId(wcId)\n if (!wc) return undefined\n // Case 1: BrowserView\n for (const win of BrowserWindow.getAllWindows()) {\n for (const view of win.getBrowserViews()) {\n if (view.webContents.id === wcId) {\n return win as BWItem\n }\n }\n }\n\n // Case 2: WebView\n // webview 有 hostWebContents,指向它所在的 BrowserWindow 的 webContents\n if (wc.hostWebContents) {\n return BrowserWindow.fromWebContents(wc.hostWebContents) as BWItem\n }\n // Case 3: 普通 window 本身\n const win = BrowserWindow.fromWebContents(wc)\n if (win) return win as BWItem\n\n return undefined\n }\n\n /**\n * 手动对BrowserView进行排序\n * @param windowId 窗口ID或名称\n */\n public sortBrowserViews(windowId: string | number) {\n const window = this.get(windowId) as BWItem;\n if (window && window._type === 'BW') {\n this._sortBrowserViews(window);\n }\n }\n\n /**\n * 防抖的排序方法\n * @param window 目标窗口\n */\n private sortBrowserViewsDebounced = lodash.debounce((window: BWItem, view: BVItem) => {\n this._sortBrowserViews(window, view);\n }, 50);\n\n /**\n * 对BrowserView进行排序\n * @param window 目标窗口\n */\n private _sortBrowserViews(window: BWItem, addView?: BVItem) {\n try {\n if (window.isDestroyed()) {\n return;\n }\n\n const views = window.getBrowserViews() || [];\n if (views.length <= 1) return;\n\n log('log', 'sortBrowserViews', views?.map(i => this._getWebContentsId(i as BVItem)));\n\n // 创建排序后的视图数组(不修改原数组)\n const sortedViews = [...views].sort((a, b) => {\n const zIndexA = (a as BVItem)._zIndex ?? 0;\n const zIndexB = (b as BVItem)._zIndex ?? 0;\n return zIndexA - zIndexB;\n });\n\n // 检查是否已经按正确顺序排列(优化:提前退出)\n let needsReorder = false;\n for (let i = 0; i < views.length; i++) {\n const view = views[i];\n const sortedView = sortedViews[i];\n const viewId = this._getWebContentsId(view as BVItem);\n const sortedViewId = this._getWebContentsId(sortedView as BVItem);\n if (!view || !sortedView || viewId !== sortedViewId) {\n needsReorder = true;\n break;\n }\n }\n\n log('log', 'sortBrowserViews needsReorder', needsReorder, sortedViews?.map(i => this._getWebContentsId(i as BVItem)));\n\n // 如果已经按正确顺序排列,则不需要重新排序\n if (!needsReorder) return;\n\n // 移除所有BrowserView(排除刚添加的视图,避免不必要的操作)\n const addViewId = this._getWebContentsId(addView);\n views.forEach(view => {\n const viewId = this._getWebContentsId(view as BVItem);\n if (addViewId !== viewId) {\n try {\n // @ts-ignore\n window.removeBrowserView(view, false);\n } catch (error) {\n // 忽略错误,视图可能已经被移除\n }\n }\n });\n\n // 按正确顺序重新添加\n sortedViews.forEach((view, index) => {\n try {\n if (index === 0) {\n // 第一个设置为当前视图\n // @ts-ignore\n window.setBrowserView(view, false);\n } else {\n // 其他视图添加到后面\n // @ts-ignore\n window.addBrowserView(view, false);\n }\n } catch (error) {\n log('error', 'addBrowserView in sortBrowserViews error:', error);\n }\n });\n } catch (error) {\n log('error', 'sortBrowserViews error:', error);\n }\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, preloadWebContentsConfig?: PreloadWebContentsConfig, webviewDomainWhiteList?: 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, preloadWebContentsConfig, webviewDomainWhiteList)\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 if (opt.data.url && findWin.webContents.getURL() !== opt.data.url) {\n findWin.webContents.loadURL(opt.data.url)\n /** fix: url hash 无法正常加载 */\n setTimeout(()=> {\n findWin.webContents.reload();\n }, 100);\n }\n if (opt.data.browserWindow?.parent) {\n try {\n if (findWin._type === 'BW') {\n (findWin as BWItem).setParentWindow(BrowserWindow.fromId(Number(opt.data.browserWindow.parent)))\n }\n if (findWin._type === 'BV') {\n BrowserWindow.fromId(Number(opt.data.browserWindow.parent))?.addBrowserView(findWin as BVItem)\n }\n } catch (error) {\n log('error', 'setParentWindow error:', error);\n }\n }\n if (findWin?._type === 'BV' && opt.data.zIndex) {\n (findWin as BVItem)._zIndex = opt.data.zIndex;\n }\n const winId = wm._getWebContentsId(findWin);\n return {\n winId: Number(`${winId || -1}`),\n winName: `${findWin?._name || ''}`,\n winType: `${findWin?._type || ''}`,\n winExtraData: `${findWin?._extraData || ''}`,\n winInitUrl: `${findWin?._initUrl || ''}`,\n winZIndex: `${(findWin as BVItem)._zIndex || 0}`,\n };\n }\n const res = await wm.create(opt.data)\n const winId = wm._getWebContentsId(res);\n return {\n winId: Number(`${winId || -1}`),\n winName: `${res?._name || ''}`,\n winType: `${res?._type || ''}`,\n winExtraData: `${res?._extraData || ''}`,\n winInitUrl: `${res?._initUrl || ''}`,\n winZIndex: `${res?._zIndex || 0}`,\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 const winId = wm._getWebContentsId(res);\n return {\n winId: Number(`${winId || -1}`),\n winName: `${res?._name || ''}`,\n winType: `${res?._type || ''}`,\n winExtraData: `${res?._extraData || ''}`,\n winInitUrl: `${res?._initUrl || ''}`,\n winZIndex: `${res?._zIndex || 0}`,\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: Record<string | number, any> = {}\n res.forEach(i => {\n const winId = wm._getWebContentsId(i);\n if (winId !== undefined) {\n obj[winId] = {\n winId: Number(`${winId}`),\n winName: `${i?._name || ''}`,\n winType: `${i?._type || ''}`,\n winExtraData: `${i?._extraData || ''}`,\n winInitUrl: `${i?._initUrl || ''}`,\n winZIndex: `${i?._zIndex || 0}`,\n }\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 === 'rename') {\n const opt = data as {\n type: 'rename';\n data: {\n idOrName: string | number;\n newName: string;\n };\n };\n const res = wm.rename(opt.data.idOrName, opt.data.newName)\n if (res) {\n const winId = wm._getWebContentsId(res);\n return {\n winId: Number(`${winId || -1}`),\n winName: `${res?._name || ''}`,\n winType: `${res?._type || ''}`,\n winExtraData: `${res?._extraData || ''}`,\n winInitUrl: `${res?._initUrl || ''}`,\n winZIndex: `${res?._zIndex || 0}`,\n };\n }\n return undefined;\n }\n\n if (data?.type === 'reInitUrl') {\n const opt = data as {\n type: 'reInitUrl';\n data: {\n idOrName: string | number;\n url: string;\n };\n };\n const res = wm.reInitUrl(opt.data.idOrName, opt.data.url)\n if (res) {\n const winId = wm._getWebContentsId(res);\n return {\n winId: Number(`${winId || -1}`),\n winName: `${res?._name || ''}`,\n winType: `${res?._type || ''}`,\n winExtraData: `${res?._extraData || ''}`,\n winInitUrl: `${res?._initUrl || ''}`,\n winZIndex: `${res?._zIndex || 0}`,\n };\n }\n return undefined;\n }\n\n if (data?.type === 'getWindowForWebContentsId') {\n const opt = data as {\n type: 'getWindowForWebContentsId';\n data: number;\n };\n const res = await wm.getWindowForWebContentsId(opt.data)\n if (res) {\n return wm._getWebContentsId(res);\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 if (data?.type === 'borrowView_getBounds') {\n const opt = data as {\n type: 'borrowView_getBounds';\n data: {\n webContentId: number;\n options: {};\n };\n };\n const bv = wm.get(opt.data.webContentId)\n if (bv) {\n return bv.getBounds()\n }\n return undefined\n }\n if (data?.type === 'borrowView_setBounds') {\n const opt = data as {\n type: 'borrowView_setBounds';\n data: {\n webContentId: number;\n options: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n };\n };\n const bv = wm.get(opt.data.webContentId)\n if (bv) {\n bv.setBounds(opt.data.options)\n }\n return undefined\n }\n if (data?.type === 'borrowView_setAutoResize') {\n const opt = data as {\n type: 'borrowView_setAutoResize';\n data: {\n webContentId: number;\n options: {\n width: boolean;\n height: boolean;\n horizontal: boolean;\n vertical: boolean;\n };\n };\n };\n const bv = wm.get(opt.data.webContentId) as BVItem;\n if (bv) {\n bv.setAutoResize(opt.data.options)\n }\n return undefined\n }\n if (data?.type === 'borrowView_setBackgroundColor') {\n const opt = data as {\n type: 'borrowView_setBackgroundColor';\n data: {\n webContentId: number;\n options: string;\n };\n };\n const bv = wm.get(opt.data.webContentId) as BVItem;\n if (bv) {\n bv.setBackgroundColor(opt.data.options)\n }\n return undefined\n }\n // 是否开启预加载窗口\n if (data?.type === 'setPreloadWebContentsConfig') {\n const opt = data as {\n type: 'setPreloadWebContentsConfig';\n data: PreloadWebContentsConfig;\n };\n wm.setPreloadWebContentsConfig(opt.data)\n }\n\n if (data?.type === 'createPreloadWebContents') {\n const opt = data as {\n type: 'createPreloadWebContents';\n data: string;\n };\n const res = await wm.createPreloadWebContents(opt.data)\n return res;\n }\n\n if (data?.type === 'sortBrowserViews') {\n const opt = data as {\n type: 'sortBrowserViews';\n data: string | number;\n };\n wm.sortBrowserViews(opt.data);\n return true;\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":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/main/index.ts"],"sourcesContent":["import lodash from 'lodash'\nimport { EventEmitter } from 'events'\nimport { app, BrowserWindow, BrowserView, WebContents, BrowserWindowConstructorOptions, session, Session, webContents, BrowserViewConstructorOptions } from 'electron'\nimport * as remote from '@electron/remote/main'\nimport eIpc from '@lynker-desktop/electron-ipc/main'\nimport md5 from 'md5'\nimport type { ElectronWindowsManagerOptions, BWItem, BVItem, PreloadWebContentsConfig } from '../common';\nimport PQueue from 'p-queue'\n\nconst getQueue = (() => {\n let queue: PQueue;\n return async () => {\n if (!queue) {\n // const { default: PQueue } = await import('p-queue')\n queue = new PQueue({ concurrency: 1 });\n }\n return queue;\n }\n})();\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\nconst initWebContentsVal = (win: BWItem | BVItem, preload: string) => {\n try {\n if (!win?.webContents || win.webContents.isDestroyed()) {\n return;\n }\n const webContentsId = win.webContents.id;\n win.webContents.executeJavaScript(`\n try {\n const data = {\n __ELECTRON_WINDOW_MANAGER_WEB_CONTENTS_ID__: ${JSON.stringify(webContentsId)},\n __ELECTRON_WINDOW_MANAGER_TYPE__: ${JSON.stringify(win._type)},\n __ELECTRON_WINDOW_MANAGER_NAME__: ${JSON.stringify(win._name)},\n __ELECTRON_WINDOW_MANAGER_EXTRA_DATA__: ${JSON.stringify(win._extraData || '')},\n __ELECTRON_WINDOW_MANAGER_PRELOAD__: ${JSON.stringify(preload)},\n __ELECTRON_WINDOW_MANAGER_INIT_URL__: ${JSON.stringify(win._initUrl || '')}\n };\n Object.entries(data).forEach(([key, value]) => {\n window[key] = value;\n });\n } catch (error) {}\n `)\n } catch (error) {\n // 忽略错误,webContents 可能已销毁\n }\n}\n\nexport class WindowsManager extends EventEmitter {\n loadingViewUrl: string | undefined;\n errorViewUrl: string | undefined;\n preload?: string;\n // 预加载的webContents配置\n preloadWebContentsConfig?: PreloadWebContentsConfig;\n windows: Map<number, BWItem | BVItem>;\n // 按名称索引的 Map,用于加速查找\n windowsByName: Map<string, number> = new Map();\n // 预加载的窗口\n preloadedBW: BWItem | null = null;\n // 预加载的窗口(无边框,有按钮)\n preloadedBW_FramelessWithButtons: BWItem | null = null;\n // 预加载的窗口(无边框,无按钮)\n preloadedBW_FramelessNoButtons: BWItem | null = null;\n // 预加载的浏览器视图\n preloadedBV: BVItem | null = null;\n preloading: boolean = false;\n webviewDomainWhiteList: string[] = [];\n // 窗口销毁检查的防抖函数,避免频繁检查\n private cleanupDestroyedWindowsDebounced = lodash.debounce(() => {\n this._cleanupDestroyedWindows();\n }, 500);\n /**\n * webview 域名白名单\n * 传入格式示例:\n * [\n * 'example.com', // 精确匹配 example.com\n * '.example.com', // 匹配所有 example.com 的子域名,如 a.example.com、b.example.com\n * 'sub.domain.com', // 精确匹配 sub.domain.com\n * 'localhost', // 匹配 localhost 及本地回环地址\n * '127.0.0.1', // 匹配 127.0.0.1\n * '::1' // 匹配 IPv6 本地回环\n * ]\n * 注意:\n * - 以点开头的(如 .example.com)会匹配所有子域名。\n * - 不带点的(如 example.com)只匹配主域名。\n * - 'localhost'、'127.0.0.1'、'::1' 以及局域网 IP(如 192.168.x.x、10.x.x.x、172.16.x.x~172.31.x.x)都视为本地白名单。\n */\n constructor(preload?: string, loadingViewUrl?: string, errorViewUrl?: string, preloadWebContentsConfig?: PreloadWebContentsConfig, webviewDomainWhiteList?: string[]) {\n super();\n this.preload = preload;\n // 使用 Proxy 监听 windows Map 的变化\n const windowsMap = new Map<number, BWItem | BVItem>();\n this.windows = new Proxy(windowsMap, {\n set: (target, prop, value) => {\n const result = Reflect.set(target, prop, value);\n this._emitDidAnyChange();\n return result;\n },\n get: (target, prop) => {\n const value = Reflect.get(target, prop);\n // 如果是函数,需要绑定到原始 Map 实例\n if (typeof value === 'function') {\n // 拦截会修改 Map 的方法\n if (prop === 'set' || prop === 'delete' || prop === 'clear') {\n return (...args: any[]) => {\n const result = (value as Function).apply(target, args);\n this._emitDidAnyChange();\n return result;\n };\n }\n // 其他方法(如 forEach, get, has 等)直接绑定到 target\n return (value as Function).bind(target);\n }\n return value;\n }\n });\n this.loadingViewUrl = `${loadingViewUrl ?? ''}`;\n this.errorViewUrl = `${errorViewUrl ?? ''}`;\n this.preloadWebContentsConfig = preloadWebContentsConfig;\n this.webviewDomainWhiteList = webviewDomainWhiteList || [];\n log('log', 'preloadWebContentsConfig: ', this.preloadWebContentsConfig);\n if (this.preloadWebContentsConfig) {\n if (this.preloadWebContentsConfig.nodeIntegration === undefined) {\n this.preloadWebContentsConfig.nodeIntegration = true;\n }\n if (this.preloadWebContentsConfig.contextIsolation === undefined) {\n this.preloadWebContentsConfig.contextIsolation = false;\n }\n getQueue();\n app.whenReady().then(() => {\n if (this.preloadWebContentsConfig) {\n this.setPreloadWebContentsConfig(this.preloadWebContentsConfig);\n }\n });\n }\n }\n\n /**\n * 设置预加载的webContents配置\n * @param preloadWebContentsConfig 预加载的webContents配置\n */\n setPreloadWebContentsConfig(preloadWebContentsConfig: PreloadWebContentsConfig) {\n try {\n this.preloadWebContentsConfig = preloadWebContentsConfig;\n if (this.preloadWebContentsConfig) {\n getQueue().then(q => q.add(async () => {\n return await this._preloadInstances();\n }));\n } else {\n this.preloadedBW = null;\n this.preloadedBW_FramelessWithButtons = null;\n this.preloadedBW_FramelessNoButtons = null;\n this.preloadedBV = null;\n }\n } catch (error) {\n log('error', 'setPreloadWebContentsConfig error:', error);\n }\n }\n\n /**\n * Promise 超时包装函数\n * @param promise 要包装的 Promise\n * @param timeout 超时时间(毫秒)\n * @param errorMessage 超时错误信息\n */\n private async _withTimeout<T>(\n promise: Promise<T>,\n timeout: number,\n errorMessage: string\n ): Promise<T> {\n const timeoutPromise = new Promise<T>((_, reject) => {\n setTimeout(() => {\n reject(new Error(errorMessage));\n }, timeout);\n });\n return Promise.race([promise, timeoutPromise]);\n }\n\n /**\n * 预加载实例\n */\n private async _preloadInstances() {\n if (this.preloading) return;\n this.preloading = true;\n try {\n if (this.preloadWebContentsConfig) {\n log('log', 'preloadWebContentsConfig: ', this.preloadWebContentsConfig);\n const preloadPromises: Promise<any>[] = [];\n\n // 根据配置决定是否预加载普通窗口\n if (this.preloadWebContentsConfig.enableBW !== false && !this.preloadedBW) {\n preloadPromises.push(\n this._createPreloadBW({}).then(i => {\n this.preloadedBW = i;\n log('log', 'init preloadedBW: ', !!this.preloadedBW);\n }).catch(error => {\n log('error', '预加载 BW 失败:', error);\n })\n );\n }\n // 根据配置决定是否预加载无边框有按钮的窗口\n if (this.preloadWebContentsConfig.enableBW_FramelessWithButtons !== false && !this.preloadedBW_FramelessWithButtons) {\n preloadPromises.push(\n this._createPreloadBW({\n frame: false,\n autoHideMenuBar: true,\n titleBarStyle: 'hidden',\n }).then(i => {\n this.preloadedBW_FramelessWithButtons = i;\n log('log', 'init preloadedBW_FramelessWithButtons: ', !!this.preloadedBW_FramelessWithButtons);\n }).catch(error => {\n log('error', '预加载 BW_FramelessWithButtons 失败:', error);\n })\n );\n }\n // 根据配置决定是否预加载无边框无按钮的窗口\n if (this.preloadWebContentsConfig.enableBW_FramelessNoButtons !== false && !this.preloadedBW_FramelessNoButtons) {\n preloadPromises.push(\n this._createPreloadBW({\n frame: false,\n autoHideMenuBar: true,\n titleBarStyle: 'default',\n }).then(i => {\n this.preloadedBW_FramelessNoButtons = i;\n log('log', 'init preloadedBW_FramelessNoButtons: ', !!this.preloadedBW_FramelessNoButtons);\n }).catch(error => {\n log('error', '预加载 BW_FramelessNoButtons 失败:', error);\n })\n );\n }\n // 根据配置决定是否预加载浏览器视图\n if (this.preloadWebContentsConfig.enableBV !== false && !this.preloadedBV) {\n preloadPromises.push(\n this._createPreloadBV().then(i => {\n this.preloadedBV = i;\n log('log', 'init preloadedBV: ', !!this.preloadedBV);\n }).catch(error => {\n log('error', '预加载 BV 失败:', error);\n })\n );\n }\n\n if (preloadPromises.length > 0) {\n // 添加超时机制,默认 10 秒超时\n const timeout = 10000; // 10 秒\n try {\n await this._withTimeout(\n Promise.allSettled(preloadPromises),\n timeout,\n `预加载超时(${timeout}ms)`\n );\n } catch (error) {\n log('error', '预加载超时:', error);\n // 超时后继续执行,不阻塞后续流程\n }\n }\n }\n } catch (e) {\n log('error', '预创建实例失败', e);\n }\n this.preloading = false;\n }\n\n /**\n * 创建预加载的窗口\n * @param options 窗口选项\n * @returns 预加载的窗口\n */\n private _createPreloadBW(options: Partial<BrowserWindowConstructorOptions> = {}): Promise<BWItem> {\n return new Promise((resolve) => {\n const preload = this.preload;\n const url = this.preloadWebContentsConfig?.url;\n if (this.preloadWebContentsConfig?.url) {\n const webPreferences = (options.webPreferences || {});\n const instance = new BrowserWindow({\n useContentSize: true,\n show: false,\n backgroundColor: '#ffffff',\n ...options,\n webPreferences: {\n ...webPreferences,\n sandbox: false,\n webviewTag: true,\n plugins: true,\n nodeIntegration: this.preloadWebContentsConfig?.nodeIntegration ?? true,\n contextIsolation: this.preloadWebContentsConfig?.contextIsolation ?? false,\n backgroundThrottling: false,\n webSecurity: false,\n preload: webPreferences.preload || preload,\n defaultEncoding: 'utf-8',\n }\n });\n try {\n remote.enable(instance.webContents);\n } catch (error) {\n log('error', '预加载 BW 设置 remote 失败', error);\n }\n try {\n const webContentsId = instance.webContents?.id;\n if (webContentsId !== undefined) {\n // @ts-ignore\n instance._id = webContentsId;\n }\n } catch (error) {\n log('error', '预加载 BW 设置 _id 失败', error);\n }\n // @ts-ignore\n const webContentsId = instance.webContents?.id;\n log('log', '创建预BW: ', webContentsId, this.preloadWebContentsConfig?.url);\n // instance.webContents.once('did-finish-load', () => {\n // resolve(instance as BWItem);\n // });\n // instance.webContents.once('did-fail-load', () => {\n // resolve(instance as BWItem);\n // });\n // @ts-ignore\n instance.loadURL(url ? `${url}` : 'about:blank');\n resolve(instance as BWItem);\n } else {\n resolve(null as any);\n }\n });\n }\n\n /**\n * 创建预加载的浏览器视图\n * @returns 预加载的浏览器视图\n */\n private _createPreloadBV(options: Partial<BrowserViewConstructorOptions> = {}): Promise<BVItem> {\n return new Promise((resolve) => {\n const preload = this.preload;\n const url = this.preloadWebContentsConfig?.url;\n if (this.preloadWebContentsConfig?.url) {\n const webPreferences = (options.webPreferences || {});\n const instance = new BrowserView({\n webPreferences: {\n ...webPreferences,\n sandbox: false,\n webviewTag: true,\n plugins: true,\n nodeIntegration: this.preloadWebContentsConfig?.nodeIntegration ?? true,\n contextIsolation: this.preloadWebContentsConfig?.contextIsolation ?? false,\n // backgroundThrottling: false,\n webSecurity: false,\n preload: webPreferences.preload || preload,\n defaultEncoding: 'utf-8',\n }\n });\n try {\n remote.enable(instance.webContents);\n } catch (error) {\n log('error', '预加载 BV 设置 remote 失败', error);\n }\n try {\n const webContentsId = instance.webContents?.id;\n if (webContentsId !== undefined) {\n // @ts-ignore\n instance._id = webContentsId;\n }\n // 设置默认zIndex层级\n (instance as BVItem)._zIndex = 0;\n } catch (error) {\n log('error', '预加载 BV 设置 _id 失败', error);\n }\n // @ts-ignore\n const webContentsId = instance.webContents?.id;\n log('log', '创建预BV: ', webContentsId, this.preloadWebContentsConfig?.url);\n // instance.webContents.once('did-finish-load', () => {\n // resolve(instance as BVItem);\n // });\n // instance.webContents.once('did-fail-load', () => {\n // resolve(instance as BVItem);\n // });\n // @ts-ignore\n instance.webContents.loadURL(url || 'about:blank');\n resolve(instance as BVItem);\n } else {\n resolve(null as any);\n }\n });\n }\n\n // 方法重载声明\n async create(options: Omit<ElectronWindowsManagerOptions, 'type'> & { type?: 'BW' }): Promise<BWItem>;\n async create(options: ElectronWindowsManagerOptions & { type: 'BV' }): Promise<BVItem>;\n async create(options: ElectronWindowsManagerOptions): Promise<BVItem | BWItem>;\n\n async create(options: ElectronWindowsManagerOptions): Promise<BVItem | BWItem> {\n const queue = await getQueue();\n const win = await queue.add(async() => {\n const window = await this._createWindow(options);\n return window;\n })\n return win\n }\n\n /**\n * 实际的窗口创建逻辑\n */\n private async _createWindow(options: ElectronWindowsManagerOptions): Promise<BVItem | BWItem> {\n let window: any;\n const {\n usePreload = true,\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 zIndex = 0,\n } = options;\n const existingWinId = this.windowsByName.get(options.name);\n if (existingWinId) {\n window = this.windows.get(existingWinId);\n if (window) {\n return window;\n }\n // 清理无效的引用\n this.windowsByName.delete(options.name);\n }\n options.type = type;\n // 优先复用预创建实例\n let preloadWin: BWItem | BVItem | null = null;\n if (type === 'BW' && usePreload && this.preloadWebContentsConfig?.url) {\n const bwOptions = (browserWindowOptions as import('../common').BrowserWindowType) || {};\n if (bwOptions.frame === false) {\n if (bwOptions.titleBarStyle === 'default' || !bwOptions.titleBarStyle) {\n if (this.preloadWebContentsConfig.enableBW_FramelessNoButtons !== false && this.preloadedBW_FramelessNoButtons) {\n preloadWin = this.preloadedBW_FramelessNoButtons;\n this.preloadedBW_FramelessNoButtons = await this._createPreloadBW({\n frame: false,\n // transparent: true,\n titleBarStyle: 'default',\n webPreferences: {\n preload: bwOptions?.webPreferences?.preload || this.preload,\n }\n })\n }\n } else {\n if (this.preloadWebContentsConfig.enableBW_FramelessWithButtons !== false && this.preloadedBW_FramelessWithButtons) {\n preloadWin = this.preloadedBW_FramelessWithButtons;\n this.preloadedBW_FramelessWithButtons = await this._createPreloadBW({\n frame: false,\n // transparent: true,\n titleBarStyle: 'hidden',\n webPreferences: {\n preload: this.preload,\n }\n })\n }\n }\n } else {\n if (this.preloadWebContentsConfig.enableBW !== false && this.preloadedBW) {\n preloadWin = this.preloadedBW;\n this.preloadedBW = await this._createPreloadBW({\n webPreferences: {\n preload: bwOptions?.webPreferences?.preload || this.preload,\n }\n })\n }\n }\n }\n if (type === 'BV' && usePreload && this.preloadWebContentsConfig?.url) {\n const bvOptions = (browserWindowOptions as import('../common').BrowserViewType) || {};\n if (this.preloadWebContentsConfig.enableBV !== false && this.preloadedBV) {\n preloadWin = this.preloadedBV;\n this.preloadedBV = await this._createPreloadBV({\n webPreferences: {\n preload: bvOptions?.webPreferences?.preload || this.preload,\n }\n })\n }\n }\n if (preloadWin) {\n const win = preloadWin;\n log('log', `${name} 使用预加载窗口(${type})`, this._getWebContentsId(win));\n win._type = type;\n win._name = options.name || 'anonymous';\n win._extraData = `${options?.extraData || ''}`;\n win._initUrl = `${options?.url || ''}`;\n // @ts-ignore\n // win?.removeAllListeners && win?.removeAllListeners?.();\n // win.webContents.removeAllListeners && win.webContents.removeAllListeners();\n if (type === 'BW') {\n // @ts-ignore\n this._applyBrowserWindowOptions(win as BWItem, options);\n }\n if (type === 'BV') {\n this._applyBrowserViewOptions(win as BVItem, options);\n }\n if (typeof this.preloadWebContentsConfig?.customLoadURL === 'function') {\n try {\n if (type === 'BW') {\n // @ts-ignore\n const originLoadURL = win.loadURL;\n // @ts-ignore\n win.loadURL = async (url: string, useNativeLoadURL = false) => {\n return new Promise(async (resolve, reject) => {\n if (useNativeLoadURL) {\n log('log', 'useNativeLoadURL win.loadURL');\n try {\n await originLoadURL.call(win, url);\n resolve(undefined);\n } catch (error) {\n reject(error);\n }\n return;\n }\n try {\n log('log', 'customLoadURL win.loadURL');\n // @ts-ignore\n await this.preloadWebContentsConfig.customLoadURL(url || 'about:blank', (url) => originLoadURL.call(win, url), win.webContents);\n try {\n (win as BWItem).emit('ready-to-show');\n } catch (error) {\n log('error', 'emit ready-to-show event failed:', error);\n }\n resolve(undefined)\n } catch (error) {\n reject(error);\n }\n })\n\n }\n }\n const originWebContentsLoadURL = win.webContents.loadURL;\n // @ts-ignore\n win.webContents.loadURL = async (url: string, useNativeLoadURL = false) => {\n return new Promise(async (resolve, reject) => {\n if (useNativeLoadURL) {\n log('log', 'useNativeLoadURL win.webContents.loadURL');\n try {\n await originWebContentsLoadURL.call(win.webContents, url);\n resolve(undefined);\n } catch (error) {\n reject(error);\n }\n return;\n }\n try {\n log('log', 'customLoadURL win.webContents.loadURL');\n // @ts-ignore\n await this.preloadWebContentsConfig.customLoadURL(url || 'about:blank', (url) => originWebContentsLoadURL.call(win.webContents, url), win.webContents);\n try {\n (win as BVItem).webContents.emit('ready-to-show');\n } catch (error) {\n log('error', 'emit ready-to-show event failed:', error);\n }\n resolve(undefined);\n } catch (error) {\n reject(error);\n }\n })\n }\n } catch (error) {\n log('error', 'customLoadURL error', error);\n }\n }\n window = win;\n }\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 try {\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 const preload = browserWindowOptions?.webPreferences?.preload || this.preload;\n if (!window) {\n window = type === 'BV' ?\n new BrowserView(\n lodash.merge(\n (browserWindowOptions || {}),\n {\n webPreferences: lodash.merge({\n sandbox: false,\n webviewTag: true,\n // session: getCustomSession(),\n plugins: true,\n nodeIntegration: true,\n contextIsolation: false,\n // fix bv二次挂载会灰屏\n // backgroundThrottling: false,\n nativeWindowOpen: true,\n webSecurity: false,\n preload: preload,\n defaultEncoding: 'utf-8',\n }, browserWindowOptions?.webPreferences || {})\n },\n )\n ) as BVItem\n : new BrowserWindow(\n lodash.merge(\n {\n acceptFirstMouse: true,\n },\n (browserWindowOptions || {}),\n {\n parent: parentWin,\n webPreferences: lodash.merge({\n sandbox: false,\n webviewTag: true,\n // session: getCustomSession(),\n plugins: true,\n nodeIntegration: true,\n contextIsolation: false,\n backgroundThrottling: false,\n nativeWindowOpen: true,\n webSecurity: false,\n preload: preload,\n defaultEncoding: 'utf-8',\n }, browserWindowOptions?.webPreferences || {})\n },\n )\n ) as BWItem;\n log('log', `${name} 不使用 ${type === 'BV' ? 'preloadedBV' : 'preloadedBW'}`, window?.webContents?.id);\n try {\n remote.enable(window.webContents);\n } catch (error) {\n log('error', 'enable: ', error)\n }\n }\n // 停止加载\n // window.webContents?.stop?.();\n // @ts-ignore\n // @ts-ignore\n try {\n const webContentsId = this._getWebContentsId(window);\n if (webContentsId !== undefined) {\n window._id = Number(`${webContentsId}`);\n }\n } catch (error) {\n // log('error', 'set id: ', error)\n }\n\n window._type = type;\n window._name = name;\n window._extraData = `${options?.extraData || ''}`;\n window._initUrl = `${options?.url || ''}`;\n // 设置zIndex层级\n window._zIndex = options.zIndex ?? 0;\n log('log', 'create 5: ', this._getWebContentsId(window), window._name);\n if (loadingView?.url && loadingView?.url !== 'about:blank') {\n if (type === 'BW') {\n // @ts-ignore\n this._setLoadingView(window, options);\n }\n }\n if (errorView?.url && errorView?.url !== 'about:blank') {\n if (type === 'BW') {\n const showErrorView = lodash.debounce(() => {\n const _url = window._initUrl;\n /**\n * 判断是否是错误视图\n */\n const isErrorView = `${_url}`.toUpperCase().startsWith(`${errorView?.url}`.toUpperCase());\n if (!isErrorView && _url) {\n // @ts-ignore\n window.loadURL ? window.loadURL(`${errorView?.url}`) : window.webContents.loadURL(`${errorView?.url}`);\n window.webContents.executeJavaScript(`\n var key = '__ELECTRON_WINDOW_MANAGER_DID_FAIL_LOAD_URL__';\n window[key] = \"${_url}\";\n sessionStorage.setItem(key, \"${_url}\");\n `);\n }\n }, 1000);\n // @ts-ignore\n window.webContents.on('did-fail-load', (event, errorCode, errorDescription, validatedURL, isMainFrame) => {\n if (isMainFrame) {\n showErrorView();\n }\n });\n // 当开始加载时取消错误视图\n window.webContents.on('did-start-loading', () => {\n showErrorView.cancel();\n });\n // 当导航开始时取消错误视图\n window.webContents.on('did-start-navigation', () => {\n showErrorView.cancel();\n });\n // 当页面重新加载时取消错误视图\n window.webContents.on('did-navigate', () => {\n showErrorView.cancel();\n });\n // 当页面完成加载时取消错误视图\n window.webContents.on('did-finish-load', () => {\n showErrorView.cancel();\n });\n // 当窗口关闭时取消错误视图\n window.webContents.on('close', () => {\n showErrorView.cancel();\n });\n // 当窗口销毁时取消错误视图\n window.webContents.on('destroyed', () => {\n showErrorView.cancel();\n });\n }\n }\n window.webContents.on('did-attach-webview', (_event: any, webContents: any) => {\n const tryEnable = () => {\n try {\n const url = webContents.getURL();\n if (!url || url === 'about:blank') {\n return;\n }\n\n if (this.webviewDomainWhiteList && this.webviewDomainWhiteList.length > 0) {\n try {\n const { hostname } = new URL(url);\n // 优化白名单判断,支持 .example.com 形式的子域名通配和本地/内网IP\n const isWhiteListed = this.webviewDomainWhiteList.some(domain => {\n if (domain === 'localhost' || domain === '127.0.0.1' || domain === '::1') {\n return this._isLocalhost(hostname);\n }\n if (domain.startsWith('.')) {\n // .example.com 允许所有 *.example.com\n return hostname === domain.slice(1) || hostname.endsWith(domain);\n } else {\n // 精确匹配\n return hostname === domain;\n }\n }) || this._isLocalhost(hostname); // 允许本地回环和内网地址\n\n if (isWhiteListed) {\n enable(webContents);\n } else {\n log('log', 'webview 域名未在白名单,未启用 remote', url);\n }\n } catch {\n log('log', 'webview url 解析失败,未启用 remote', url);\n }\n } else {\n enable(webContents); // 没有配置白名单则全部允许\n }\n } catch (error) {\n log('error', 'tryEnable webview error:', error);\n }\n };\n // 只监听一次,防止多次触发\n const onDidNavigate = () => {\n tryEnable();\n webContents.removeListener('did-navigate', onDidNavigate);\n webContents.removeListener('did-finish-load', onDidNavigate);\n };\n webContents.on('did-navigate', onDidNavigate);\n webContents.on('did-finish-load', onDidNavigate);\n });\n // window.webContents.on('close', () => {\n // this.windows.delete(window.id || window._id)\n // })\n window.webContents.on('destroyed', () => {\n const winId = this._getWebContentsId(window);\n if (winId !== undefined) {\n this.windows.delete(winId);\n }\n // 同步清理名称索引\n this.windowsByName.delete(window._name);\n })\n window.webContents.on('dom-ready', () => {\n if (openDevTools) {\n window.webContents.openDevTools();\n }\n });\n if (type === 'BW') {\n // @ts-ignore\n if (options.browserWindow?.show !== false) {\n window.show()\n }\n // @ts-ignore\n window.on('closed', () => {\n const winId = this._getWebContentsId(window);\n log('log', 'closed', winId, window._name);\n if (winId !== undefined) {\n this.windows.delete(winId);\n }\n // 同步清理名称索引\n this.windowsByName.delete(window._name);\n });\n }\n if (type === 'BV') {\n parentWin?.addBrowserView(window);\n log('log', 'create - addBrowserView')\n }\n\n const winId = this._getWebContentsId(window);\n if (winId !== undefined) {\n this.windows.set(winId, window);\n // 同步更新名称索引\n this.windowsByName.set(window._name, winId);\n }\n log('log', 'create', this.windows.keys())\n\n // 初始化值\n window.webContents.on('did-finish-load', () => {\n log('log', 'did-finish-load', this._getWebContentsId(window));\n initWebContentsVal(window, `${preload || ''}`);\n })\n window.webContents.on('did-start-loading', () => {\n log('log', 'did-start-loading', this._getWebContentsId(window));\n initWebContentsVal(window, `${preload || ''}`);\n })\n if (type === 'BW') {\n const handleBrowserViewFocus = (view: BrowserView) => {\n try {\n view.webContents?.focus();\n view.webContents?.executeJavaScript(`\n try {\n window.dispatchEvent(new Event('focus'));\n } catch (error) {\n // 忽略错误,避免影响主流程\n }\n `)\n } catch (error) {\n log('error', 'handleBrowserViewFocus', error);\n }\n }\n const handleBrowserViewBlur = (view: BrowserView) => {\n try {\n view.webContents?.executeJavaScript(`\n try {\n window.dispatchEvent(new Event('blur'));\n } catch (error) {\n // 忽略错误,避免影响主流程\n }\n `)\n } catch (error) {\n log('error', 'handleBrowserViewBlur', error);\n }\n }\n window.on('focus', () => {\n try {\n if (typeof window.getBrowserViews === 'function') {\n const views = (window as BrowserWindow).getBrowserViews() || [];\n for (const view of views) {\n handleBrowserViewFocus(view)\n }\n }\n } catch (error) {\n log('error', 'focus', error);\n }\n });\n window.on('blur', () => {\n try {\n if (typeof window.getBrowserViews === 'function') {\n const views = (window as BrowserWindow).getBrowserViews();\n for (const view of views) {\n handleBrowserViewBlur(view)\n }\n }\n } catch (error) {\n log('error', 'focus', error);\n }\n });\n try {\n const _addBrowserView = window.addBrowserView;\n window.addBrowserView = (view: BrowserView, isSort: boolean = false) => {\n _addBrowserView.call(window, view);\n handleBrowserViewFocus(view);\n // 添加BrowserView后重新排序(如果未禁用自动排序)\n log('log', 'addBrowserView-sort', isSort, window.getBrowserViews());\n if (isSort) {\n this.sortBrowserViewsDebounced(window, view as BVItem);\n }\n }\n const _removeBrowserView = window.removeBrowserView;\n window.removeBrowserView = (view: BrowserView, isSort: boolean = false) => {\n _removeBrowserView.call(window, view);\n handleBrowserViewBlur(view);\n // 移除BrowserView后重新排序(如果未禁用自动排序)\n log('log', 'removeBrowserView-sort', isSort);\n if (isSort) {\n this.sortBrowserViewsDebounced(window, view as BVItem);\n }\n }\n const _setBrowserView = window.setBrowserView;\n window.setBrowserView = (view: BrowserView, isSort: boolean = false) => {\n const views = window.getBrowserViews() || [];\n for (const existingView of views) {\n handleBrowserViewBlur(existingView)\n }\n _setBrowserView.call(window, view);\n handleBrowserViewFocus(view);\n log('log', 'setBrowserView-sort', isSort);\n if (isSort) {\n this.sortBrowserViewsDebounced(window, view as BVItem);\n }\n }\n } catch (error) {\n log('error', 'focus', error);\n }\n }\n\n if (options.url) {\n // @ts-ignore\n window.loadURL ? window.loadURL(options.url) : window.webContents.loadURL(options.url);\n if ((options.browserWindow as Partial<BrowserWindowConstructorOptions>)?.focusable !== false) {\n window?.focus?.();\n }\n window?.webContents?.focus?.();\n }\n } catch (error) {\n log('error', 'create', error)\n throw error;\n }\n\n if (!window) {\n throw new Error(`Failed to create window: ${name}`);\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 sandbox: false,\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.addBrowserView(_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);\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.addBrowserView(_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 /**\n * 检查窗口是否已销毁\n */\n private _isWindowDestroyed(win: BWItem | BVItem): boolean {\n try {\n return !win || !win.webContents || win.webContents.isDestroyed();\n } catch {\n return true;\n }\n }\n\n /**\n * 安全地获取窗口的 webContents.id\n * 如果 webContents 已销毁,返回 undefined\n */\n _getWebContentsId(win: BWItem | BVItem | null | undefined): number | undefined {\n try {\n if (!win || !win.webContents) {\n return undefined;\n }\n if (win.webContents.isDestroyed()) {\n return undefined;\n }\n return win.webContents.id;\n } catch {\n return undefined;\n }\n }\n\n /**\n * 判断是否本地/内网IP\n */\n private _isLocalhost(hostname: string): boolean {\n return (\n hostname === 'localhost' ||\n hostname === '127.0.0.1' ||\n hostname === '::1' ||\n /^192\\.168\\./.test(hostname) ||\n /^10\\./.test(hostname) ||\n /^172\\.(1[6-9]|2[0-9]|3[0-1])\\./.test(hostname)\n );\n }\n\n /**\n * 清理已销毁的窗口(延迟执行,避免频繁检查)\n */\n private _cleanupDestroyedWindows() {\n const toDelete: number[] = [];\n this.windows.forEach((win, key) => {\n if (this._isWindowDestroyed(win)) {\n toDelete.push(key);\n // 同步清理名称索引\n if (win?._name) {\n this.windowsByName.delete(win._name);\n }\n }\n });\n toDelete.forEach(key => this.windows.delete(key));\n }\n\n /**\n * 触发 didAnyChange 事件,返回最新的 windows(只包含核心数据)\n */\n private _emitDidAnyChange() {\n const windowsData: Record<number, {\n webContentsId: number;\n name: string;\n type: 'BW' | 'BV';\n extraData?: string;\n initUrl?: string;\n zIndex?: number;\n }> = {};\n\n this.windows.forEach((win, key) => {\n if (!this._isWindowDestroyed(win)) {\n const webContentsId = this._getWebContentsId(win);\n if (webContentsId !== undefined) {\n windowsData[webContentsId] = {\n webContentsId,\n name: win._name || 'anonymous',\n type: win._type || 'BW',\n extraData: win._extraData,\n initUrl: win._initUrl,\n zIndex: (win as BVItem)._zIndex,\n };\n }\n }\n });\n\n this.emit('didAnyChange', windowsData);\n }\n\n get(idOrName: string | number): BWItem | BVItem | undefined {\n log('log', 'get', idOrName);\n let win: BWItem | BVItem | undefined;\n\n if (typeof idOrName === 'number') {\n // 按 ID 查找(O(1)),使用 webContents.id\n win = this.windows.get(idOrName);\n } else if (typeof idOrName === 'string') {\n // 按名称查找(O(1),使用索引)\n const winId = this.windowsByName.get(idOrName);\n if (winId !== undefined) {\n win = this.windows.get(winId);\n }\n // 如果索引中找不到,回退到遍历查找(兼容旧数据)\n if (!win) {\n this.windows.forEach(w => {\n if (w._name === idOrName) {\n win = w;\n // 更新索引,使用 webContents.id\n const webContentsId = this._getWebContentsId(w);\n if (webContentsId !== undefined) {\n this.windowsByName.set(idOrName, webContentsId);\n }\n }\n });\n }\n }\n\n // 检查找到的窗口是否已销毁\n if (win && !this._isWindowDestroyed(win)) {\n return win;\n }\n\n // 窗口已销毁,触发清理\n if (win) {\n const winId = this._getWebContentsId(win);\n if (winId !== undefined) {\n this.windows.delete(winId);\n }\n if (win._name) {\n this.windowsByName.delete(win._name);\n }\n }\n\n // 延迟清理其他已销毁的窗口\n this.cleanupDestroyedWindowsDebounced();\n\n return undefined;\n }\n\n getAll(type: 'BW'): Map<number, BWItem>;\n getAll(type: 'BV'): Map<number, BVItem>;\n getAll(): Map<number, BWItem | BVItem>;\n getAll(type?: 'BW' | 'BV'): Map<number, BWItem | BVItem> {\n log('log', 'getAll');\n\n // 先清理已销毁的窗口\n const toDelete: number[] = [];\n this.windows.forEach((win, key) => {\n if (this._isWindowDestroyed(win)) {\n toDelete.push(key);\n if (win?._name) {\n this.windowsByName.delete(win._name);\n }\n }\n });\n toDelete.forEach(key => this.windows.delete(key));\n\n if (!type) {\n return this.windows;\n }\n\n const result = new Map<number, BWItem | BVItem>();\n this.windows.forEach((win, key) => {\n if (!this._isWindowDestroyed(win) && win._type === type) {\n result.set(key, win);\n }\n });\n // 使用类型断言,TypeScript 会通过方法重载确保类型正确\n return result as any;\n }\n\n close(idOrName: string | number) {\n log('log', 'close', idOrName);\n const win = this.get(idOrName);\n\n if (!win) {\n return false;\n }\n\n const winId = this._getWebContentsId(win);\n if (winId !== undefined) {\n this.windows.delete(winId);\n }\n if (win._name) {\n this.windowsByName.delete(win._name);\n }\n\n try {\n if (win._type === 'BV') {\n // 从所有 BW 窗口中移除该 BV\n this.windows.forEach(i => {\n if (i?._type === 'BW' && !this._isWindowDestroyed(i)) {\n const _win = i as BWItem;\n try {\n _win.removeBrowserView(win as BVItem);\n } catch (error) {\n // 忽略错误,可能已经移除\n }\n }\n });\n }\n // @ts-ignore\n win.webContents?.destroy?.();\n // @ts-ignore\n win.close?.();\n // @ts-ignore\n win.destroy?.();\n } catch (error) {\n log('error', 'close window error:', error);\n }\n\n return true;\n }\n\n closeAll() {\n log('log', 'closeAll');\n const windowsToClose = Array.from(this.windows.values());\n // 先清空 Map,避免在遍历过程中修改\n this.windows.clear();\n this.windowsByName.clear();\n\n // 收集所有 BW 窗口,用于批量移除 BV\n const bwWindows = windowsToClose.filter(w => w._type === 'BW' && !this._isWindowDestroyed(w)) as BWItem[];\n const bvWindows = windowsToClose.filter(w => w._type === 'BV') as BVItem[];\n\n // 先从所有 BW 窗口中移除 BV\n bvWindows.forEach(bv => {\n bwWindows.forEach(bw => {\n try {\n bw.removeBrowserView(bv);\n } catch (error) {\n // 忽略错误,可能已经移除\n }\n });\n });\n\n // 然后销毁所有窗口\n windowsToClose.forEach((win) => {\n try {\n if (this._isWindowDestroyed(win)) {\n return;\n }\n // @ts-ignore\n win.webContents?.destroy?.();\n // @ts-ignore\n win.close?.();\n // @ts-ignore\n win.destroy?.();\n } catch (error) {\n log('error', 'closeAll error:', error);\n }\n });\n }\n\n rename(idOrName: string | number, newName: string) {\n log('log', 'rename', idOrName, newName);\n const win = this.get(idOrName);\n\n if (!win) {\n return undefined;\n }\n\n // 检查新名字是否已存在(使用索引加速)\n const existingWinId = this.windowsByName.get(newName);\n if (existingWinId !== undefined) {\n const existingWin = this.windows.get(existingWinId);\n if (existingWin && existingWin !== win && !this._isWindowDestroyed(existingWin)) {\n // 新名字已被占用\n return undefined;\n }\n }\n\n // 更新名称索引\n const oldName = win._name;\n const winId = this._getWebContentsId(win);\n if (winId !== undefined) {\n this.windowsByName.delete(oldName);\n this.windowsByName.set(newName, winId);\n }\n\n // 修改名字并同步 webContents\n win._name = newName;\n initWebContentsVal(win, `${this.preload || ''}`);\n return win;\n }\n\n reInitUrl(idOrName: string | number, url: string): BWItem | BVItem | undefined {\n log('log', 'reInitUrl', idOrName, url);\n const win = this.get(idOrName);\n\n if (!win) {\n return undefined;\n }\n\n win._initUrl = url;\n initWebContentsVal(win, `${this.preload || ''}`);\n return win;\n }\n\n getPreload() {\n log('log', 'getPreload');\n return this.preload;\n }\n\n private _applyBrowserWindowOptions(win: BWItem, options: ElectronWindowsManagerOptions) {\n const browserWindowOptions = options.browserWindow as Partial<BrowserWindowConstructorOptions> || {};\n // 设置父窗口\n if (typeof browserWindowOptions.parent === 'number') {\n const parentWin = BrowserWindow.fromId(browserWindowOptions.parent);\n if (parentWin) {\n win.setParentWindow(parentWin);\n }\n }\n // 设置窗口大小\n if (typeof browserWindowOptions.width === 'number' && typeof browserWindowOptions.height === 'number') {\n win.setBounds({ width: browserWindowOptions.width, height: browserWindowOptions.height });\n }\n // 置顶\n if (typeof browserWindowOptions.alwaysOnTop === 'boolean') {\n win.setAlwaysOnTop(browserWindowOptions.alwaysOnTop);\n }\n // 设置背景颜色\n if (typeof browserWindowOptions.backgroundColor === 'string') {\n win.setBackgroundColor(browserWindowOptions.backgroundColor);\n }\n // 居中\n if (browserWindowOptions?.center !== false) {\n win.center();\n }\n // 设置窗口移动\n if (typeof browserWindowOptions.movable === 'boolean') {\n win.setMovable(browserWindowOptions.movable);\n }\n // 设置窗口大小调整\n if (typeof browserWindowOptions.resizable === 'boolean') {\n win.setResizable(browserWindowOptions.resizable);\n }\n // 设置全屏模式\n if (typeof browserWindowOptions.fullscreenable === 'boolean') {\n win.setFullScreenable(browserWindowOptions.fullscreenable);\n }\n // 设置窗口阴影\n if (typeof browserWindowOptions.hasShadow === 'boolean') {\n win.setHasShadow(browserWindowOptions.hasShadow);\n }\n // 设置窗口最小尺寸\n if (typeof browserWindowOptions.minWidth === 'number' && typeof browserWindowOptions.minHeight === 'number') {\n win.setMinimumSize(browserWindowOptions.minWidth, browserWindowOptions.minHeight);\n }\n // 设置窗口最大尺寸\n if (typeof browserWindowOptions.maxWidth === 'number' && typeof browserWindowOptions.maxHeight === 'number') {\n win.setMaximumSize(browserWindowOptions.maxWidth, browserWindowOptions.maxHeight);\n }\n // 设置窗口位置\n if (typeof browserWindowOptions.x === 'number' && typeof browserWindowOptions.y === 'number') {\n win.setPosition(browserWindowOptions.x, browserWindowOptions.y);\n }\n // 设置窗口标题\n if (typeof browserWindowOptions.title === 'string') {\n win.setTitle(browserWindowOptions.title);\n }\n // 设置窗口图标\n if (typeof browserWindowOptions.icon === 'string') {\n win.setIcon(browserWindowOptions.icon);\n }\n // 设置窗口菜单栏可见性\n if (typeof browserWindowOptions.autoHideMenuBar === 'boolean') {\n win.setAutoHideMenuBar(browserWindowOptions.autoHideMenuBar);\n }\n // 设置窗口最小化按钮\n if (browserWindowOptions.minimizable === false) {\n win.setMinimizable(false);\n }\n // 设置窗口最大化按钮\n if (browserWindowOptions.maximizable === false) {\n win.setMaximizable(false);\n }\n // 设置窗口关闭按钮\n if (browserWindowOptions.closable === false) {\n win.setClosable(false);\n }\n // 设置窗口焦点\n if (browserWindowOptions.focusable === false) {\n win.setFocusable(false);\n }\n // 设置窗口全屏\n if (browserWindowOptions.fullscreen === true) {\n win.setFullScreen(true);\n }\n // 设置窗口背景材质\n if (typeof browserWindowOptions.vibrancy === 'string') {\n win.setVibrancy(browserWindowOptions.vibrancy);\n }\n // 设置窗口透明度\n if (typeof browserWindowOptions.opacity === 'number') {\n win.setOpacity(browserWindowOptions.opacity);\n }\n // 设置窗口显示状态\n if (browserWindowOptions.show === false) {\n win.hide();\n }\n\n // 可继续扩展其他动态属性\n }\n\n private _applyBrowserViewOptions(view: BVItem, options: ElectronWindowsManagerOptions) {\n const browserWindowOptions = options.browserWindow as Partial<BrowserWindowConstructorOptions> || {};\n let parentWin: BrowserWindow | undefined;\n if (typeof browserWindowOptions.parent === 'number') {\n parentWin = BrowserWindow.fromId(browserWindowOptions.parent) || undefined;\n if (parentWin) {\n parentWin.addBrowserView(view);\n }\n }\n // 设置视图大小\n if (typeof browserWindowOptions.width === 'number' && typeof browserWindowOptions.height === 'number') {\n view.setBounds({ x: 0, y: 0, width: browserWindowOptions.width, height: browserWindowOptions.height });\n }\n // 设置视图位置\n if (typeof browserWindowOptions.x === 'number' && typeof browserWindowOptions.y === 'number') {\n const bounds = view.getBounds();\n view.setBounds({\n x: browserWindowOptions.x,\n y: browserWindowOptions.y,\n width: bounds.width,\n height: bounds.height\n });\n }\n // 设置视图背景颜色\n if (typeof browserWindowOptions.backgroundColor === 'string') {\n view.setBackgroundColor(browserWindowOptions.backgroundColor);\n }\n // 可继续扩展其他动态属性\n }\n\n // 生成一个bv 做为预加载资源窗口,加载完成后销毁\n async createPreloadWebContents(url: string) {\n let bv: any = null;\n try {\n bv = await this.create({\n type: 'BV',\n url,\n name: `preload-web-contents-${md5(url)}`,\n extraData: `${url}`\n })\n return new Promise((resolve, reject) => {\n const winId = this._getWebContentsId(bv);\n if (!winId) {\n reject(new Error('Failed to get window ID'));\n return;\n }\n bv.webContents.on('did-finish-load', () => {\n if (winId) {\n this.close(winId);\n }\n resolve(true);\n bv = null;\n })\n bv.webContents.on('did-fail-load', () => {\n if (winId) {\n this.close(winId);\n }\n reject(new Error('Failed to load web contents'));\n bv = null;\n })\n bv.webContents.loadURL(url);\n })\n } catch (error) {\n if (bv) {\n const winId = this._getWebContentsId(bv);\n if (winId) {\n this.close(winId);\n }\n }\n throw error;\n }\n }\n\n async getWindowForWebContentsId(wcId: number): Promise<BWItem | undefined> {\n const wc = webContents.fromId(wcId)\n if (!wc) return undefined\n // Case 1: BrowserView\n for (const win of BrowserWindow.getAllWindows()) {\n for (const view of win.getBrowserViews()) {\n if (view.webContents.id === wcId) {\n return win as BWItem\n }\n }\n }\n\n // Case 2: WebView\n // webview 有 hostWebContents,指向它所在的 BrowserWindow 的 webContents\n if (wc.hostWebContents) {\n return BrowserWindow.fromWebContents(wc.hostWebContents) as BWItem\n }\n // Case 3: 普通 window 本身\n const win = BrowserWindow.fromWebContents(wc)\n if (win) return win as BWItem\n\n return undefined\n }\n\n /**\n * 手动对BrowserView进行排序\n * @param windowId 窗口ID或名称\n */\n public sortBrowserViews(windowId: string | number) {\n const window = this.get(windowId) as BWItem;\n if (window && window._type === 'BW') {\n this._sortBrowserViews(window);\n }\n }\n\n /**\n * 防抖的排序方法\n * @param window 目标窗口\n */\n private sortBrowserViewsDebounced = lodash.debounce((window: BWItem, view: BVItem) => {\n this._sortBrowserViews(window, view);\n }, 50);\n\n /**\n * 对BrowserView进行排序\n * @param window 目标窗口\n */\n private _sortBrowserViews(window: BWItem, addView?: BVItem) {\n try {\n if (window.isDestroyed()) {\n return;\n }\n\n const views = window.getBrowserViews() || [];\n if (views.length <= 1) return;\n\n log('log', 'sortBrowserViews', views?.map(i => this._getWebContentsId(i as BVItem)));\n\n // 创建排序后的视图数组(不修改原数组)\n const sortedViews = [...views].sort((a, b) => {\n const zIndexA = (a as BVItem)._zIndex ?? 0;\n const zIndexB = (b as BVItem)._zIndex ?? 0;\n return zIndexA - zIndexB;\n });\n\n // 检查是否已经按正确顺序排列(优化:提前退出)\n let needsReorder = false;\n for (let i = 0; i < views.length; i++) {\n const view = views[i];\n const sortedView = sortedViews[i];\n const viewId = this._getWebContentsId(view as BVItem);\n const sortedViewId = this._getWebContentsId(sortedView as BVItem);\n if (!view || !sortedView || viewId !== sortedViewId) {\n needsReorder = true;\n break;\n }\n }\n\n log('log', 'sortBrowserViews needsReorder', needsReorder, sortedViews?.map(i => this._getWebContentsId(i as BVItem)));\n\n // 如果已经按正确顺序排列,则不需要重新排序\n if (!needsReorder) return;\n\n // 移除所有BrowserView(排除刚添加的视图,避免不必要的操作)\n const addViewId = this._getWebContentsId(addView);\n views.forEach(view => {\n const viewId = this._getWebContentsId(view as BVItem);\n if (addViewId !== viewId) {\n try {\n // @ts-ignore\n window.removeBrowserView(view, false);\n } catch (error) {\n // 忽略错误,视图可能已经被移除\n }\n }\n });\n\n // 按正确顺序重新添加\n sortedViews.forEach((view, index) => {\n try {\n if (index === 0) {\n // 第一个设置为当前视图\n // @ts-ignore\n window.setBrowserView(view, false);\n } else {\n // 其他视图添加到后面\n // @ts-ignore\n window.addBrowserView(view, false);\n }\n } catch (error) {\n log('error', 'addBrowserView in sortBrowserViews error:', error);\n }\n });\n } catch (error) {\n log('error', 'sortBrowserViews error:', error);\n }\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, preloadWebContentsConfig?: PreloadWebContentsConfig, webviewDomainWhiteList?: 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, preloadWebContentsConfig, webviewDomainWhiteList)\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 if (opt.data.url && findWin.webContents.getURL() !== opt.data.url) {\n findWin.webContents.loadURL(opt.data.url)\n /** fix: url hash 无法正常加载 */\n setTimeout(()=> {\n findWin.webContents.reload();\n }, 100);\n }\n if (opt.data.browserWindow?.parent) {\n try {\n if (findWin._type === 'BW') {\n (findWin as BWItem).setParentWindow(BrowserWindow.fromId(Number(opt.data.browserWindow.parent)))\n }\n if (findWin._type === 'BV') {\n BrowserWindow.fromId(Number(opt.data.browserWindow.parent))?.addBrowserView(findWin as BVItem)\n }\n } catch (error) {\n log('error', 'setParentWindow error:', error);\n }\n }\n if (findWin?._type === 'BV' && opt.data.zIndex) {\n (findWin as BVItem)._zIndex = opt.data.zIndex;\n }\n const winId = wm._getWebContentsId(findWin);\n return {\n winId: Number(`${winId || -1}`),\n winName: `${findWin?._name || ''}`,\n winType: `${findWin?._type || ''}`,\n winExtraData: `${findWin?._extraData || ''}`,\n winInitUrl: `${findWin?._initUrl || ''}`,\n winZIndex: `${(findWin as BVItem)._zIndex || 0}`,\n };\n }\n const res = await wm.create(opt.data)\n const winId = wm._getWebContentsId(res);\n return {\n winId: Number(`${winId || -1}`),\n winName: `${res?._name || ''}`,\n winType: `${res?._type || ''}`,\n winExtraData: `${res?._extraData || ''}`,\n winInitUrl: `${res?._initUrl || ''}`,\n winZIndex: `${res?._zIndex || 0}`,\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 const winId = wm._getWebContentsId(res);\n return {\n winId: Number(`${winId || -1}`),\n winName: `${res?._name || ''}`,\n winType: `${res?._type || ''}`,\n winExtraData: `${res?._extraData || ''}`,\n winInitUrl: `${res?._initUrl || ''}`,\n winZIndex: `${res?._zIndex || 0}`,\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: Record<string | number, any> = {}\n res.forEach(i => {\n const winId = wm._getWebContentsId(i);\n if (winId !== undefined) {\n obj[winId] = {\n winId: Number(`${winId}`),\n winName: `${i?._name || ''}`,\n winType: `${i?._type || ''}`,\n winExtraData: `${i?._extraData || ''}`,\n winInitUrl: `${i?._initUrl || ''}`,\n winZIndex: `${i?._zIndex || 0}`,\n }\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 === 'rename') {\n const opt = data as {\n type: 'rename';\n data: {\n idOrName: string | number;\n newName: string;\n };\n };\n const res = wm.rename(opt.data.idOrName, opt.data.newName)\n if (res) {\n const winId = wm._getWebContentsId(res);\n return {\n winId: Number(`${winId || -1}`),\n winName: `${res?._name || ''}`,\n winType: `${res?._type || ''}`,\n winExtraData: `${res?._extraData || ''}`,\n winInitUrl: `${res?._initUrl || ''}`,\n winZIndex: `${res?._zIndex || 0}`,\n };\n }\n return undefined;\n }\n\n if (data?.type === 'reInitUrl') {\n const opt = data as {\n type: 'reInitUrl';\n data: {\n idOrName: string | number;\n url: string;\n };\n };\n const res = wm.reInitUrl(opt.data.idOrName, opt.data.url)\n if (res) {\n const winId = wm._getWebContentsId(res);\n return {\n winId: Number(`${winId || -1}`),\n winName: `${res?._name || ''}`,\n winType: `${res?._type || ''}`,\n winExtraData: `${res?._extraData || ''}`,\n winInitUrl: `${res?._initUrl || ''}`,\n winZIndex: `${res?._zIndex || 0}`,\n };\n }\n return undefined;\n }\n\n if (data?.type === 'getWindowForWebContentsId') {\n const opt = data as {\n type: 'getWindowForWebContentsId';\n data: number;\n };\n const res = await wm.getWindowForWebContentsId(opt.data)\n if (res) {\n return wm._getWebContentsId(res);\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 if (data?.type === 'borrowView_getBounds') {\n const opt = data as {\n type: 'borrowView_getBounds';\n data: {\n webContentId: number;\n options: {};\n };\n };\n const bv = wm.get(opt.data.webContentId)\n if (bv) {\n return bv.getBounds()\n }\n return undefined\n }\n if (data?.type === 'borrowView_setBounds') {\n const opt = data as {\n type: 'borrowView_setBounds';\n data: {\n webContentId: number;\n options: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n };\n };\n const bv = wm.get(opt.data.webContentId)\n if (bv) {\n bv.setBounds(opt.data.options)\n }\n return undefined\n }\n if (data?.type === 'borrowView_setAutoResize') {\n const opt = data as {\n type: 'borrowView_setAutoResize';\n data: {\n webContentId: number;\n options: {\n width: boolean;\n height: boolean;\n horizontal: boolean;\n vertical: boolean;\n };\n };\n };\n const bv = wm.get(opt.data.webContentId) as BVItem;\n if (bv) {\n bv.setAutoResize(opt.data.options)\n }\n return undefined\n }\n if (data?.type === 'borrowView_setBackgroundColor') {\n const opt = data as {\n type: 'borrowView_setBackgroundColor';\n data: {\n webContentId: number;\n options: string;\n };\n };\n const bv = wm.get(opt.data.webContentId) as BVItem;\n if (bv) {\n bv.setBackgroundColor(opt.data.options)\n }\n return undefined\n }\n // 是否开启预加载窗口\n if (data?.type === 'setPreloadWebContentsConfig') {\n const opt = data as {\n type: 'setPreloadWebContentsConfig';\n data: PreloadWebContentsConfig;\n };\n wm.setPreloadWebContentsConfig(opt.data)\n }\n\n if (data?.type === 'createPreloadWebContents') {\n const opt = data as {\n type: 'createPreloadWebContents';\n data: string;\n };\n const res = await wm.createPreloadWebContents(opt.data)\n return res;\n }\n\n if (data?.type === 'sortBrowserViews') {\n const opt = data as {\n type: 'sortBrowserViews';\n data: string | number;\n };\n wm.sortBrowserViews(opt.data);\n return true;\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":[],"mappings":"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"}
|
package/main/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
1
2
|
import { WebContents } from 'electron';
|
|
2
3
|
import type { ElectronWindowsManagerOptions, BWItem, BVItem, PreloadWebContentsConfig } from '../common';
|
|
3
4
|
export declare const getCustomSession: () => Electron.Session;
|
|
4
5
|
export declare const enable: (win: WebContents) => void;
|
|
5
|
-
export declare class WindowsManager {
|
|
6
|
+
export declare class WindowsManager extends EventEmitter {
|
|
6
7
|
loadingViewUrl: string | undefined;
|
|
7
8
|
errorViewUrl: string | undefined;
|
|
8
9
|
preload?: string;
|
|
@@ -89,6 +90,10 @@ export declare class WindowsManager {
|
|
|
89
90
|
* 清理已销毁的窗口(延迟执行,避免频繁检查)
|
|
90
91
|
*/
|
|
91
92
|
private _cleanupDestroyedWindows;
|
|
93
|
+
/**
|
|
94
|
+
* 触发 didAnyChange 事件,返回最新的 windows(只包含核心数据)
|
|
95
|
+
*/
|
|
96
|
+
private _emitDidAnyChange;
|
|
92
97
|
get(idOrName: string | number): BWItem | BVItem | undefined;
|
|
93
98
|
getAll(type: 'BW'): Map<number, BWItem>;
|
|
94
99
|
getAll(type: 'BV'): Map<number, BVItem>;
|