@lynker-desktop/electron-window-manager 0.0.9-alpha.1 → 0.0.9-alpha.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/index.d.ts +15 -0
- package/common/index.d.ts.map +1 -1
- package/esm/common/index.d.ts +15 -0
- package/esm/common/index.d.ts.map +1 -1
- package/esm/main/index.d.ts +34 -8
- package/esm/main/index.d.ts.map +1 -1
- package/esm/main/index.js +211 -77
- package/esm/main/index.js.map +1 -1
- package/esm/renderer/index.d.ts +4 -4
- package/esm/renderer/index.d.ts.map +1 -1
- package/esm/renderer/index.js +6 -6
- package/esm/renderer/index.js.map +1 -1
- package/main/index.d.ts +34 -8
- package/main/index.d.ts.map +1 -1
- package/main/index.js +211 -77
- package/main/index.js.map +1 -1
- package/package.json +2 -2
- package/renderer/index.d.ts +4 -4
- package/renderer/index.d.ts.map +1 -1
- package/renderer/index.js +6 -6
- package/renderer/index.js.map +1 -1
package/common/index.d.ts
CHANGED
|
@@ -57,5 +57,20 @@ export interface BVItem extends BrowserView {
|
|
|
57
57
|
/** 初始化url */
|
|
58
58
|
_initUrl?: string;
|
|
59
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* 预加载配置接口
|
|
62
|
+
*/
|
|
63
|
+
export interface PreloadWebContentsConfig {
|
|
64
|
+
/** 预加载的 URL */
|
|
65
|
+
url: string;
|
|
66
|
+
/** 是否预加载普通窗口 */
|
|
67
|
+
enableBW?: boolean;
|
|
68
|
+
/** 是否预加载无边框有按钮的窗口 */
|
|
69
|
+
enableBW_FramelessWithButtons?: boolean;
|
|
70
|
+
/** 是否预加载无边框无按钮的窗口 */
|
|
71
|
+
enableBW_FramelessNoButtons?: boolean;
|
|
72
|
+
/** 是否预加载浏览器视图 */
|
|
73
|
+
enableBV?: boolean;
|
|
74
|
+
}
|
|
60
75
|
export {};
|
|
61
76
|
//# sourceMappingURL=index.d.ts.map
|
package/common/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/common/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,+BAA+B,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAC;AAE3H,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,+BAA+B,EAAE,QAAQ,CAAC;IACxF,MAAM,CAAC,EAAE,MAAM,GAAG,+BAA+B,CAAC,QAAQ,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,6BAA6B,EAAE,QAAQ,CAAC;IACpF,MAAM,CAAC,EAAE,MAAM,GAAG,+BAA+B,CAAC,QAAQ,CAAC,CAAC;CAC7D;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,2BAA2B,CAAC,EAAE,GAAG,CAAC;KACnC;CACF;AAED,MAAM,MAAM,6BAA6B,GACrC,CAAC;IAAE,IAAI,CAAC,EAAE,IAAI,CAAC;IAAC,aAAa,CAAC,EAAE,iBAAiB,CAAA;CAAE,GAAG,IAAI,CAAC,iCAAiC,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,GACxH,CAAC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,aAAa,CAAC,EAAE,eAAe,CAAA;CAAE,GAAG,IAAI,CAAC,iCAAiC,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC;AAE1H,UAAU,iCAAiC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,SAAS,CAAC,EAAE;QACV,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,aAAa,CAAC,EAAE,iBAAiB,GAAG,eAAe,CAAC;IACpD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,MAAO,SAAQ,aAAa;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa;IACb,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,MAAO,SAAQ,WAAW;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa;IACb,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/common/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,+BAA+B,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAC;AAE3H,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,+BAA+B,EAAE,QAAQ,CAAC;IACxF,MAAM,CAAC,EAAE,MAAM,GAAG,+BAA+B,CAAC,QAAQ,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,6BAA6B,EAAE,QAAQ,CAAC;IACpF,MAAM,CAAC,EAAE,MAAM,GAAG,+BAA+B,CAAC,QAAQ,CAAC,CAAC;CAC7D;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,2BAA2B,CAAC,EAAE,GAAG,CAAC;KACnC;CACF;AAED,MAAM,MAAM,6BAA6B,GACrC,CAAC;IAAE,IAAI,CAAC,EAAE,IAAI,CAAC;IAAC,aAAa,CAAC,EAAE,iBAAiB,CAAA;CAAE,GAAG,IAAI,CAAC,iCAAiC,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,GACxH,CAAC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,aAAa,CAAC,EAAE,eAAe,CAAA;CAAE,GAAG,IAAI,CAAC,iCAAiC,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC;AAE1H,UAAU,iCAAiC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,SAAS,CAAC,EAAE;QACV,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,aAAa,CAAC,EAAE,iBAAiB,GAAG,eAAe,CAAC;IACpD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,MAAO,SAAQ,aAAa;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa;IACb,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,MAAO,SAAQ,WAAW;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa;IACb,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,eAAe;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,qBAAqB;IACrB,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,iBAAiB;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB"}
|
package/esm/common/index.d.ts
CHANGED
|
@@ -57,5 +57,20 @@ export interface BVItem extends BrowserView {
|
|
|
57
57
|
/** 初始化url */
|
|
58
58
|
_initUrl?: string;
|
|
59
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* 预加载配置接口
|
|
62
|
+
*/
|
|
63
|
+
export interface PreloadWebContentsConfig {
|
|
64
|
+
/** 预加载的 URL */
|
|
65
|
+
url: string;
|
|
66
|
+
/** 是否预加载普通窗口 */
|
|
67
|
+
enableBW?: boolean;
|
|
68
|
+
/** 是否预加载无边框有按钮的窗口 */
|
|
69
|
+
enableBW_FramelessWithButtons?: boolean;
|
|
70
|
+
/** 是否预加载无边框无按钮的窗口 */
|
|
71
|
+
enableBW_FramelessNoButtons?: boolean;
|
|
72
|
+
/** 是否预加载浏览器视图 */
|
|
73
|
+
enableBV?: boolean;
|
|
74
|
+
}
|
|
60
75
|
export {};
|
|
61
76
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,+BAA+B,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAC;AAE3H,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,+BAA+B,EAAE,QAAQ,CAAC;IACxF,MAAM,CAAC,EAAE,MAAM,GAAG,+BAA+B,CAAC,QAAQ,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,6BAA6B,EAAE,QAAQ,CAAC;IACpF,MAAM,CAAC,EAAE,MAAM,GAAG,+BAA+B,CAAC,QAAQ,CAAC,CAAC;CAC7D;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,2BAA2B,CAAC,EAAE,GAAG,CAAC;KACnC;CACF;AAED,MAAM,MAAM,6BAA6B,GACrC,CAAC;IAAE,IAAI,CAAC,EAAE,IAAI,CAAC;IAAC,aAAa,CAAC,EAAE,iBAAiB,CAAA;CAAE,GAAG,IAAI,CAAC,iCAAiC,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,GACxH,CAAC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,aAAa,CAAC,EAAE,eAAe,CAAA;CAAE,GAAG,IAAI,CAAC,iCAAiC,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC;AAE1H,UAAU,iCAAiC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,SAAS,CAAC,EAAE;QACV,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,aAAa,CAAC,EAAE,iBAAiB,GAAG,eAAe,CAAC;IACpD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,MAAO,SAAQ,aAAa;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa;IACb,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,MAAO,SAAQ,WAAW;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa;IACb,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,+BAA+B,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAC;AAE3H,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,+BAA+B,EAAE,QAAQ,CAAC;IACxF,MAAM,CAAC,EAAE,MAAM,GAAG,+BAA+B,CAAC,QAAQ,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,6BAA6B,EAAE,QAAQ,CAAC;IACpF,MAAM,CAAC,EAAE,MAAM,GAAG,+BAA+B,CAAC,QAAQ,CAAC,CAAC;CAC7D;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,2BAA2B,CAAC,EAAE,GAAG,CAAC;KACnC;CACF;AAED,MAAM,MAAM,6BAA6B,GACrC,CAAC;IAAE,IAAI,CAAC,EAAE,IAAI,CAAC;IAAC,aAAa,CAAC,EAAE,iBAAiB,CAAA;CAAE,GAAG,IAAI,CAAC,iCAAiC,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,GACxH,CAAC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,aAAa,CAAC,EAAE,eAAe,CAAA;CAAE,GAAG,IAAI,CAAC,iCAAiC,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC;AAE1H,UAAU,iCAAiC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,SAAS,CAAC,EAAE;QACV,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,aAAa,CAAC,EAAE,iBAAiB,GAAG,eAAe,CAAC;IACpD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,MAAO,SAAQ,aAAa;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa;IACb,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,MAAO,SAAQ,WAAW;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa;IACb,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,eAAe;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,qBAAqB;IACrB,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,iBAAiB;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB"}
|
package/esm/main/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { WebContents } from 'electron';
|
|
2
|
-
import type { ElectronWindowsManagerOptions, BWItem, BVItem } from '../common';
|
|
2
|
+
import type { ElectronWindowsManagerOptions, BWItem, BVItem, PreloadWebContentsConfig } from '../common';
|
|
3
3
|
export declare const getCustomSession: () => Electron.Session;
|
|
4
4
|
export declare const enable: (win: WebContents) => void;
|
|
5
5
|
export declare class WindowsManager {
|
|
6
6
|
loadingViewUrl: string | undefined;
|
|
7
7
|
errorViewUrl: string | undefined;
|
|
8
8
|
preload?: string;
|
|
9
|
-
|
|
9
|
+
preloadWebContentsConfig?: PreloadWebContentsConfig;
|
|
10
10
|
windows: Map<number, BWItem | BVItem>;
|
|
11
11
|
preloadedBW: BWItem | null;
|
|
12
12
|
preloadedBW_FramelessWithButtons: BWItem | null;
|
|
@@ -14,6 +14,8 @@ export declare class WindowsManager {
|
|
|
14
14
|
preloadedBV: BVItem | null;
|
|
15
15
|
preloading: boolean;
|
|
16
16
|
webviewDomainWhiteList: string[];
|
|
17
|
+
private createQueue;
|
|
18
|
+
private isCreating;
|
|
17
19
|
/**
|
|
18
20
|
* webview 域名白名单
|
|
19
21
|
* 传入格式示例:
|
|
@@ -30,18 +32,42 @@ export declare class WindowsManager {
|
|
|
30
32
|
* - 不带点的(如 example.com)只匹配主域名。
|
|
31
33
|
* - 'localhost'、'127.0.0.1'、'::1' 以及局域网 IP(如 192.168.x.x、10.x.x.x、172.16.x.x~172.31.x.x)都视为本地白名单。
|
|
32
34
|
*/
|
|
33
|
-
constructor(preload?: string, loadingViewUrl?: string, errorViewUrl?: string,
|
|
34
|
-
|
|
35
|
+
constructor(preload?: string, loadingViewUrl?: string, errorViewUrl?: string, preloadWebContentsConfig?: PreloadWebContentsConfig, webviewDomainWhiteList?: string[]);
|
|
36
|
+
/**
|
|
37
|
+
* 设置预加载的webContents配置
|
|
38
|
+
* @param preloadWebContentsConfig 预加载的webContents配置
|
|
39
|
+
*/
|
|
40
|
+
setPreloadWebContentsConfig(preloadWebContentsConfig: PreloadWebContentsConfig): void;
|
|
41
|
+
/**
|
|
42
|
+
* 预加载实例
|
|
43
|
+
*/
|
|
35
44
|
private _preloadInstances;
|
|
45
|
+
/**
|
|
46
|
+
* 创建预加载的窗口
|
|
47
|
+
* @param options 窗口选项
|
|
48
|
+
* @returns 预加载的窗口
|
|
49
|
+
*/
|
|
36
50
|
private _createPreloadBW;
|
|
51
|
+
/**
|
|
52
|
+
* 创建预加载的浏览器视图
|
|
53
|
+
* @returns 预加载的浏览器视图
|
|
54
|
+
*/
|
|
37
55
|
private _createPreloadBV;
|
|
38
56
|
create(options: Omit<ElectronWindowsManagerOptions, 'type'> & {
|
|
39
57
|
type?: 'BW';
|
|
40
|
-
}): BWItem
|
|
58
|
+
}): Promise<BWItem>;
|
|
41
59
|
create(options: ElectronWindowsManagerOptions & {
|
|
42
60
|
type: 'BV';
|
|
43
|
-
}): BVItem
|
|
44
|
-
create(options: ElectronWindowsManagerOptions):
|
|
61
|
+
}): Promise<BVItem>;
|
|
62
|
+
create(options: ElectronWindowsManagerOptions): Promise<BVItem | BWItem>;
|
|
63
|
+
/**
|
|
64
|
+
* 处理创建队列
|
|
65
|
+
*/
|
|
66
|
+
private processCreateQueue;
|
|
67
|
+
/**
|
|
68
|
+
* 实际的窗口创建逻辑
|
|
69
|
+
*/
|
|
70
|
+
private _createWindow;
|
|
45
71
|
_setLoadingView(window: BWItem, createOptions: ElectronWindowsManagerOptions): void;
|
|
46
72
|
get(idOrName: string | number): BWItem | BVItem | undefined;
|
|
47
73
|
getAll(type: 'BW'): Map<number, BWItem>;
|
|
@@ -57,5 +83,5 @@ export declare class WindowsManager {
|
|
|
57
83
|
createPreloadWebContents(url: string): Promise<unknown>;
|
|
58
84
|
}
|
|
59
85
|
export declare let isInitialized: boolean;
|
|
60
|
-
export declare const initialize: (preload?: string, loadingViewUrl?: string, errorViewUrl?: string,
|
|
86
|
+
export declare const initialize: (preload?: string, loadingViewUrl?: string, errorViewUrl?: string, preloadWebContentsConfig?: PreloadWebContentsConfig, webviewDomainWhiteList?: string[]) => WindowsManager;
|
|
61
87
|
//# sourceMappingURL=index.d.ts.map
|
package/esm/main/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/main/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAmC,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/main/index.ts"],"names":[],"mappings":"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"}
|
package/esm/main/index.js
CHANGED
|
@@ -56,30 +56,43 @@ class WindowsManager {
|
|
|
56
56
|
* - 不带点的(如 example.com)只匹配主域名。
|
|
57
57
|
* - 'localhost'、'127.0.0.1'、'::1' 以及局域网 IP(如 192.168.x.x、10.x.x.x、172.16.x.x~172.31.x.x)都视为本地白名单。
|
|
58
58
|
*/
|
|
59
|
-
constructor(preload, loadingViewUrl, errorViewUrl,
|
|
59
|
+
constructor(preload, loadingViewUrl, errorViewUrl, preloadWebContentsConfig, webviewDomainWhiteList) {
|
|
60
|
+
// 预加载的窗口
|
|
60
61
|
this.preloadedBW = null;
|
|
62
|
+
// 预加载的窗口(无边框,有按钮)
|
|
61
63
|
this.preloadedBW_FramelessWithButtons = null;
|
|
64
|
+
// 预加载的窗口(无边框,无按钮)
|
|
62
65
|
this.preloadedBW_FramelessNoButtons = null;
|
|
66
|
+
// 预加载的浏览器视图
|
|
63
67
|
this.preloadedBV = null;
|
|
64
68
|
this.preloading = false;
|
|
65
69
|
this.webviewDomainWhiteList = [];
|
|
70
|
+
// 创建队列相关属性
|
|
71
|
+
this.createQueue = [];
|
|
72
|
+
this.isCreating = false;
|
|
66
73
|
this.preload = preload;
|
|
67
74
|
this.windows = new Map();
|
|
68
75
|
this.loadingViewUrl = `${loadingViewUrl ?? ''}`;
|
|
69
76
|
this.errorViewUrl = `${errorViewUrl ?? ''}`;
|
|
70
|
-
this.
|
|
77
|
+
this.preloadWebContentsConfig = preloadWebContentsConfig;
|
|
71
78
|
this.webviewDomainWhiteList = webviewDomainWhiteList || [];
|
|
72
|
-
log('log', '
|
|
73
|
-
if (this.
|
|
79
|
+
log('log', 'preloadWebContentsConfig: ', this.preloadWebContentsConfig);
|
|
80
|
+
if (this.preloadWebContentsConfig) {
|
|
74
81
|
app.on('ready', () => {
|
|
75
|
-
this.
|
|
82
|
+
if (this.preloadWebContentsConfig) {
|
|
83
|
+
this.setPreloadWebContentsConfig(this.preloadWebContentsConfig);
|
|
84
|
+
}
|
|
76
85
|
});
|
|
77
86
|
}
|
|
78
87
|
}
|
|
79
|
-
|
|
88
|
+
/**
|
|
89
|
+
* 设置预加载的webContents配置
|
|
90
|
+
* @param preloadWebContentsConfig 预加载的webContents配置
|
|
91
|
+
*/
|
|
92
|
+
setPreloadWebContentsConfig(preloadWebContentsConfig) {
|
|
80
93
|
try {
|
|
81
|
-
this.
|
|
82
|
-
if (this.
|
|
94
|
+
this.preloadWebContentsConfig = preloadWebContentsConfig;
|
|
95
|
+
if (this.preloadWebContentsConfig) {
|
|
83
96
|
this._preloadInstances();
|
|
84
97
|
}
|
|
85
98
|
else {
|
|
@@ -90,27 +103,42 @@ class WindowsManager {
|
|
|
90
103
|
}
|
|
91
104
|
}
|
|
92
105
|
catch (error) {
|
|
93
|
-
log('error', '
|
|
106
|
+
log('error', 'setPreloadWebContentsConfig error:', error);
|
|
94
107
|
}
|
|
95
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* 预加载实例
|
|
111
|
+
*/
|
|
96
112
|
async _preloadInstances() {
|
|
97
113
|
if (this.preloading)
|
|
98
114
|
return;
|
|
99
115
|
this.preloading = true;
|
|
100
116
|
try {
|
|
101
|
-
if (this.
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
117
|
+
if (this.preloadWebContentsConfig) {
|
|
118
|
+
// 根据配置决定是否预加载普通窗口
|
|
119
|
+
if (this.preloadWebContentsConfig.enableBW !== false) {
|
|
120
|
+
this.preloadedBW = this.preloadedBW || await this._createPreloadBW({});
|
|
121
|
+
}
|
|
122
|
+
// 根据配置决定是否预加载无边框有按钮的窗口
|
|
123
|
+
if (this.preloadWebContentsConfig.enableBW_FramelessWithButtons !== false) {
|
|
124
|
+
this.preloadedBW_FramelessWithButtons = this.preloadedBW_FramelessWithButtons || await this._createPreloadBW({
|
|
125
|
+
frame: false,
|
|
126
|
+
transparent: true,
|
|
127
|
+
titleBarStyle: 'hidden',
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
// 根据配置决定是否预加载无边框无按钮的窗口
|
|
131
|
+
if (this.preloadWebContentsConfig.enableBW_FramelessNoButtons !== false) {
|
|
132
|
+
this.preloadedBW_FramelessNoButtons = this.preloadedBW_FramelessNoButtons || await this._createPreloadBW({
|
|
133
|
+
frame: false,
|
|
134
|
+
transparent: true,
|
|
135
|
+
titleBarStyle: 'customButtonsOnHover',
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
// 根据配置决定是否预加载浏览器视图
|
|
139
|
+
if (this.preloadWebContentsConfig.enableBV !== false) {
|
|
140
|
+
this.preloadedBV = this.preloadedBV || await this._createPreloadBV();
|
|
141
|
+
}
|
|
114
142
|
}
|
|
115
143
|
}
|
|
116
144
|
catch (e) {
|
|
@@ -118,23 +146,30 @@ class WindowsManager {
|
|
|
118
146
|
}
|
|
119
147
|
this.preloading = false;
|
|
120
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* 创建预加载的窗口
|
|
151
|
+
* @param options 窗口选项
|
|
152
|
+
* @returns 预加载的窗口
|
|
153
|
+
*/
|
|
121
154
|
_createPreloadBW(options = {}) {
|
|
122
155
|
return new Promise((resolve) => {
|
|
123
156
|
const preload = this.preload;
|
|
124
|
-
const url = this.
|
|
125
|
-
if (this.
|
|
157
|
+
const url = this.preloadWebContentsConfig?.url;
|
|
158
|
+
if (this.preloadWebContentsConfig?.url) {
|
|
159
|
+
const webPreferences = (options.webPreferences || {});
|
|
126
160
|
const instance = new BrowserWindow({
|
|
127
|
-
show: false,
|
|
128
161
|
...options,
|
|
162
|
+
show: false,
|
|
163
|
+
backgroundColor: '#ffffff',
|
|
129
164
|
webPreferences: {
|
|
165
|
+
...webPreferences,
|
|
130
166
|
webviewTag: true,
|
|
131
167
|
plugins: true,
|
|
132
168
|
nodeIntegration: true,
|
|
133
169
|
contextIsolation: false,
|
|
134
170
|
backgroundThrottling: false,
|
|
135
171
|
webSecurity: false,
|
|
136
|
-
preload: preload,
|
|
137
|
-
...(options.webPreferences || {}),
|
|
172
|
+
preload: webPreferences.preload || preload,
|
|
138
173
|
}
|
|
139
174
|
});
|
|
140
175
|
try {
|
|
@@ -151,31 +186,38 @@ class WindowsManager {
|
|
|
151
186
|
log('error', '预加载 BW 设置 _id 失败', error);
|
|
152
187
|
}
|
|
153
188
|
// @ts-ignore
|
|
154
|
-
log('log', '创建预BW: ', instance._id, this.
|
|
155
|
-
instance.webContents.once('did-finish-load', () => {
|
|
156
|
-
|
|
157
|
-
});
|
|
158
|
-
instance.webContents.once('did-fail-load', () => {
|
|
159
|
-
|
|
160
|
-
});
|
|
161
|
-
instance.loadURL(url
|
|
189
|
+
log('log', '创建预BW: ', instance._id, this.preloadWebContentsConfig?.url);
|
|
190
|
+
// instance.webContents.once('did-finish-load', () => {
|
|
191
|
+
// resolve(instance as BWItem);
|
|
192
|
+
// });
|
|
193
|
+
// instance.webContents.once('did-fail-load', () => {
|
|
194
|
+
// resolve(instance as BWItem);
|
|
195
|
+
// });
|
|
196
|
+
instance.loadURL(url ? `${url}` : 'about:blank');
|
|
197
|
+
resolve(instance);
|
|
162
198
|
}
|
|
163
199
|
});
|
|
164
200
|
}
|
|
165
|
-
|
|
201
|
+
/**
|
|
202
|
+
* 创建预加载的浏览器视图
|
|
203
|
+
* @returns 预加载的浏览器视图
|
|
204
|
+
*/
|
|
205
|
+
_createPreloadBV(options = {}) {
|
|
166
206
|
return new Promise((resolve) => {
|
|
167
207
|
const preload = this.preload;
|
|
168
|
-
const url = this.
|
|
169
|
-
if (this.
|
|
208
|
+
const url = this.preloadWebContentsConfig?.url;
|
|
209
|
+
if (this.preloadWebContentsConfig?.url) {
|
|
210
|
+
const webPreferences = (options.webPreferences || {});
|
|
170
211
|
const instance = new BrowserView({
|
|
171
212
|
webPreferences: {
|
|
213
|
+
...webPreferences,
|
|
172
214
|
webviewTag: true,
|
|
173
215
|
plugins: true,
|
|
174
216
|
nodeIntegration: true,
|
|
175
217
|
contextIsolation: false,
|
|
176
218
|
// backgroundThrottling: false,
|
|
177
219
|
webSecurity: false,
|
|
178
|
-
preload: preload,
|
|
220
|
+
preload: webPreferences.preload || preload,
|
|
179
221
|
}
|
|
180
222
|
});
|
|
181
223
|
try {
|
|
@@ -192,56 +234,118 @@ class WindowsManager {
|
|
|
192
234
|
log('error', '预加载 BV 设置 _id 失败', error);
|
|
193
235
|
}
|
|
194
236
|
// @ts-ignore
|
|
195
|
-
log('log', '创建预BV: ', instance._id, this.
|
|
196
|
-
instance.webContents.once('did-finish-load', () => {
|
|
197
|
-
|
|
198
|
-
});
|
|
199
|
-
instance.webContents.once('did-fail-load', () => {
|
|
200
|
-
|
|
201
|
-
});
|
|
237
|
+
log('log', '创建预BV: ', instance._id, this.preloadWebContentsConfig?.url);
|
|
238
|
+
// instance.webContents.once('did-finish-load', () => {
|
|
239
|
+
// resolve(instance as BVItem);
|
|
240
|
+
// });
|
|
241
|
+
// instance.webContents.once('did-fail-load', () => {
|
|
242
|
+
// resolve(instance as BVItem);
|
|
243
|
+
// });
|
|
202
244
|
instance.webContents.loadURL(url || 'about:blank');
|
|
245
|
+
resolve(instance);
|
|
203
246
|
}
|
|
204
247
|
});
|
|
205
248
|
}
|
|
206
249
|
create(options) {
|
|
250
|
+
return new Promise((resolve, reject) => {
|
|
251
|
+
// 将创建请求添加到队列
|
|
252
|
+
this.createQueue.push({ options, resolve, reject });
|
|
253
|
+
// 如果当前没有在创建,则开始处理队列
|
|
254
|
+
if (!this.isCreating) {
|
|
255
|
+
this.processCreateQueue();
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* 处理创建队列
|
|
261
|
+
*/
|
|
262
|
+
async processCreateQueue() {
|
|
263
|
+
if (this.isCreating || this.createQueue.length === 0) {
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
this.isCreating = true;
|
|
267
|
+
while (this.createQueue.length > 0) {
|
|
268
|
+
const { options, resolve, reject } = this.createQueue.shift();
|
|
269
|
+
try {
|
|
270
|
+
const window = await this._createWindow(options);
|
|
271
|
+
resolve(window);
|
|
272
|
+
}
|
|
273
|
+
catch (error) {
|
|
274
|
+
log('error', 'create window failed:', error);
|
|
275
|
+
reject(error);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
this.isCreating = false;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* 实际的窗口创建逻辑
|
|
282
|
+
*/
|
|
283
|
+
async _createWindow(options) {
|
|
207
284
|
let window;
|
|
208
285
|
const { usePreload = true, type = 'BW', name = 'anonymous', url, loadingView = { url: undefined }, errorView = { url: undefined }, browserWindow: browserWindowOptions, openDevTools = false, preventOriginClose = false, } = options;
|
|
209
286
|
options.type = type;
|
|
210
287
|
// 优先复用预创建实例
|
|
211
288
|
let preloadWin = null;
|
|
212
|
-
if (type === 'BW' && usePreload && this.
|
|
289
|
+
if (type === 'BW' && usePreload && this.preloadWebContentsConfig?.url) {
|
|
213
290
|
const bwOptions = browserWindowOptions || {};
|
|
214
|
-
if (bwOptions.frame === false
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
291
|
+
if (bwOptions.frame === false) {
|
|
292
|
+
if (bwOptions.titleBarStyle === 'customButtonsOnHover') {
|
|
293
|
+
if (this.preloadWebContentsConfig.enableBW_FramelessNoButtons !== false) {
|
|
294
|
+
preloadWin = this.preloadedBW_FramelessNoButtons;
|
|
295
|
+
this.preloadedBW_FramelessNoButtons = await this._createPreloadBW({
|
|
296
|
+
frame: false,
|
|
297
|
+
transparent: true,
|
|
298
|
+
titleBarStyle: 'customButtonsOnHover',
|
|
299
|
+
webPreferences: {
|
|
300
|
+
preload: bwOptions?.webPreferences?.preload || this.preload,
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
if (this.preloadWebContentsConfig.enableBW_FramelessWithButtons !== false) {
|
|
307
|
+
preloadWin = this.preloadedBW_FramelessWithButtons;
|
|
308
|
+
this.preloadedBW_FramelessWithButtons = await this._createPreloadBW({
|
|
309
|
+
frame: false,
|
|
310
|
+
transparent: true,
|
|
311
|
+
titleBarStyle: 'hidden',
|
|
312
|
+
webPreferences: {
|
|
313
|
+
preload: this.preload,
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
}
|
|
223
318
|
}
|
|
224
319
|
else {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
320
|
+
if (this.preloadWebContentsConfig.enableBW !== false) {
|
|
321
|
+
preloadWin = this.preloadedBW;
|
|
322
|
+
this.preloadedBW = await this._createPreloadBW({
|
|
323
|
+
webPreferences: {
|
|
324
|
+
preload: bwOptions?.webPreferences?.preload || this.preload,
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
}
|
|
228
328
|
}
|
|
229
329
|
}
|
|
230
|
-
if (type === 'BV' && usePreload && this.
|
|
330
|
+
if (type === 'BV' && usePreload && this.preloadWebContentsConfig?.url) {
|
|
331
|
+
const bvOptions = browserWindowOptions || {};
|
|
231
332
|
preloadWin = this.preloadedBV;
|
|
232
|
-
this.preloadedBV =
|
|
233
|
-
|
|
333
|
+
this.preloadedBV = await this._createPreloadBV({
|
|
334
|
+
webPreferences: {
|
|
335
|
+
preload: bvOptions?.webPreferences?.preload || this.preload,
|
|
336
|
+
}
|
|
337
|
+
});
|
|
234
338
|
}
|
|
235
339
|
if (preloadWin) {
|
|
236
340
|
const win = preloadWin;
|
|
237
|
-
log('log', `${name}
|
|
341
|
+
log('log', `${name} 使用预加载窗口(${type})`, win._id);
|
|
238
342
|
win._type = 'BW';
|
|
239
343
|
win._name = options.name || 'anonymous';
|
|
240
344
|
win._extraData = `${options?.extraData || ''}`;
|
|
241
345
|
win._initUrl = `${options?.url || ''}`;
|
|
242
346
|
// @ts-ignore
|
|
243
|
-
win?.removeAllListeners && win?.removeAllListeners?.();
|
|
244
|
-
win.webContents.removeAllListeners && win.webContents.removeAllListeners();
|
|
347
|
+
// win?.removeAllListeners && win?.removeAllListeners?.();
|
|
348
|
+
// win.webContents.removeAllListeners && win.webContents.removeAllListeners();
|
|
245
349
|
if (type === 'BW') {
|
|
246
350
|
// @ts-ignore
|
|
247
351
|
this._applyBrowserWindowOptions(win, options);
|
|
@@ -323,6 +427,8 @@ class WindowsManager {
|
|
|
323
427
|
log('error', 'enable: ', error);
|
|
324
428
|
}
|
|
325
429
|
}
|
|
430
|
+
// 停止加载
|
|
431
|
+
window.webContents?.stop?.();
|
|
326
432
|
// @ts-ignore
|
|
327
433
|
try {
|
|
328
434
|
window.id = Number(`${window.id || window.webContents.id}`);
|
|
@@ -351,7 +457,7 @@ class WindowsManager {
|
|
|
351
457
|
if (errorView?.url) {
|
|
352
458
|
if (type === 'BW') {
|
|
353
459
|
const showErrorView = lodash.debounce(() => {
|
|
354
|
-
const _url = window
|
|
460
|
+
const _url = window._initUrl;
|
|
355
461
|
/**
|
|
356
462
|
* 判断是否是错误视图
|
|
357
463
|
*/
|
|
@@ -365,16 +471,37 @@ class WindowsManager {
|
|
|
365
471
|
sessionStorage.setItem(key, "${_url}");
|
|
366
472
|
`);
|
|
367
473
|
}
|
|
368
|
-
},
|
|
474
|
+
}, 1000);
|
|
369
475
|
// @ts-ignore
|
|
370
476
|
window.webContents.on('did-fail-load', (event, errorCode, errorDescription, validatedURL, isMainFrame) => {
|
|
371
477
|
if (isMainFrame) {
|
|
372
478
|
showErrorView();
|
|
373
479
|
}
|
|
374
480
|
});
|
|
481
|
+
// 当开始加载时取消错误视图
|
|
375
482
|
window.webContents.on('did-start-loading', () => {
|
|
376
483
|
showErrorView.cancel();
|
|
377
484
|
});
|
|
485
|
+
// 当导航开始时取消错误视图
|
|
486
|
+
window.webContents.on('did-start-navigation', () => {
|
|
487
|
+
showErrorView.cancel();
|
|
488
|
+
});
|
|
489
|
+
// 当页面重新加载时取消错误视图
|
|
490
|
+
window.webContents.on('did-navigate', () => {
|
|
491
|
+
showErrorView.cancel();
|
|
492
|
+
});
|
|
493
|
+
// 当页面完成加载时取消错误视图
|
|
494
|
+
window.webContents.on('did-finish-load', () => {
|
|
495
|
+
showErrorView.cancel();
|
|
496
|
+
});
|
|
497
|
+
// 当窗口关闭时取消错误视图
|
|
498
|
+
window.webContents.on('close', () => {
|
|
499
|
+
showErrorView.cancel();
|
|
500
|
+
});
|
|
501
|
+
// 当窗口销毁时取消错误视图
|
|
502
|
+
window.webContents.on('destroyed', () => {
|
|
503
|
+
showErrorView.cancel();
|
|
504
|
+
});
|
|
378
505
|
}
|
|
379
506
|
}
|
|
380
507
|
window.webContents.on('did-attach-webview', (_event, webContents) => {
|
|
@@ -456,10 +583,6 @@ class WindowsManager {
|
|
|
456
583
|
parentWin?.addBrowserView(window);
|
|
457
584
|
log('log', 'create - addBrowserView');
|
|
458
585
|
}
|
|
459
|
-
// @ts-ignore
|
|
460
|
-
window.loadURL ? window.loadURL(options.url) : window.webContents.loadURL(options.url);
|
|
461
|
-
// @ts-ignore
|
|
462
|
-
window.focus ? window.focus() : window.webContents.focus();
|
|
463
586
|
this.windows.set(window.id || window._id || window.webContents.id, window);
|
|
464
587
|
log('log', 'create', this.windows.keys());
|
|
465
588
|
// 初始化值
|
|
@@ -552,6 +675,12 @@ class WindowsManager {
|
|
|
552
675
|
log('error', 'focus', error);
|
|
553
676
|
}
|
|
554
677
|
}
|
|
678
|
+
if (options.url) {
|
|
679
|
+
// @ts-ignore
|
|
680
|
+
window.loadURL ? window.loadURL(options.url) : window.webContents.loadURL(options.url);
|
|
681
|
+
// @ts-ignore
|
|
682
|
+
window.focus ? window.focus() : window.webContents.focus();
|
|
683
|
+
}
|
|
555
684
|
}
|
|
556
685
|
catch (error) {
|
|
557
686
|
log('error', 'create', error);
|
|
@@ -815,6 +944,11 @@ class WindowsManager {
|
|
|
815
944
|
if (typeof browserWindowOptions.alwaysOnTop === 'boolean') {
|
|
816
945
|
win.setAlwaysOnTop(browserWindowOptions.alwaysOnTop);
|
|
817
946
|
}
|
|
947
|
+
// 设置背景颜色
|
|
948
|
+
if (typeof browserWindowOptions.backgroundColor === 'string') {
|
|
949
|
+
win.setBackgroundColor(browserWindowOptions.backgroundColor);
|
|
950
|
+
}
|
|
951
|
+
win.center();
|
|
818
952
|
// 可继续扩展其他动态属性
|
|
819
953
|
}
|
|
820
954
|
_applyBrowserViewOptions(view, options) {
|
|
@@ -835,7 +969,7 @@ class WindowsManager {
|
|
|
835
969
|
// 生成一个bv 做为预加载资源窗口,加载完成后销毁
|
|
836
970
|
async createPreloadWebContents(url) {
|
|
837
971
|
return new Promise(async (resolve, reject) => {
|
|
838
|
-
let bv = this.create({
|
|
972
|
+
let bv = await this.create({
|
|
839
973
|
type: 'BV',
|
|
840
974
|
url,
|
|
841
975
|
name: `preload-web-contents-${md5(url)}`,
|
|
@@ -858,7 +992,7 @@ class WindowsManager {
|
|
|
858
992
|
// @ts-ignore
|
|
859
993
|
global['__ELECTRON_WINDOWS_MANAGER__'] = undefined;
|
|
860
994
|
let isInitialized = false;
|
|
861
|
-
const initialize = (preload, loadingViewUrl, errorViewUrl,
|
|
995
|
+
const initialize = (preload, loadingViewUrl, errorViewUrl, preloadWebContentsConfig, webviewDomainWhiteList) => {
|
|
862
996
|
// @ts-ignore
|
|
863
997
|
if (isInitialized && global['__ELECTRON_WINDOWS_MANAGER__']) {
|
|
864
998
|
// @ts-ignore
|
|
@@ -866,7 +1000,7 @@ const initialize = (preload, loadingViewUrl, errorViewUrl, preloadWebContentsUrl
|
|
|
866
1000
|
}
|
|
867
1001
|
isInitialized = true;
|
|
868
1002
|
// @ts-ignore
|
|
869
|
-
const wm = global['__ELECTRON_WINDOWS_MANAGER__'] = new WindowsManager(preload, loadingViewUrl, errorViewUrl,
|
|
1003
|
+
const wm = global['__ELECTRON_WINDOWS_MANAGER__'] = new WindowsManager(preload, loadingViewUrl, errorViewUrl, preloadWebContentsConfig, webviewDomainWhiteList);
|
|
870
1004
|
eIpc.mainIPC.handleRenderer('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', async (data) => {
|
|
871
1005
|
if (data?.type === 'create') {
|
|
872
1006
|
const opt = data;
|
|
@@ -890,7 +1024,7 @@ const initialize = (preload, loadingViewUrl, errorViewUrl, preloadWebContentsUrl
|
|
|
890
1024
|
winInitUrl: `${findWin?._initUrl || ''}`,
|
|
891
1025
|
};
|
|
892
1026
|
}
|
|
893
|
-
const res = wm.create(opt.data);
|
|
1027
|
+
const res = await wm.create(opt.data);
|
|
894
1028
|
return {
|
|
895
1029
|
winId: Number(`${res.id || res._id || -1}`),
|
|
896
1030
|
winName: `${res?._name || ''}`,
|
|
@@ -1026,9 +1160,9 @@ const initialize = (preload, loadingViewUrl, errorViewUrl, preloadWebContentsUrl
|
|
|
1026
1160
|
return undefined;
|
|
1027
1161
|
}
|
|
1028
1162
|
// 是否开启预加载窗口
|
|
1029
|
-
if (data?.type === '
|
|
1163
|
+
if (data?.type === 'setPreloadWebContentsConfig') {
|
|
1030
1164
|
const opt = data;
|
|
1031
|
-
wm.
|
|
1165
|
+
wm.setPreloadWebContentsConfig(opt.data);
|
|
1032
1166
|
}
|
|
1033
1167
|
if (data?.type === 'createPreloadWebContents') {
|
|
1034
1168
|
const opt = data;
|