@lynker-desktop/electron-window-manager 0.0.9-alpha.23 → 0.0.9-alpha.24

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/README.md CHANGED
@@ -50,8 +50,8 @@ ewm.create({
50
50
  width: 100,
51
51
  height:100,
52
52
  webPreferences: {
53
- plugins: true,
54
- nodeIntegration: true,
53
+ plugins: true,
54
+ nodeIntegration: true,
55
55
  contextIsolation: false,
56
56
  backgroundThrottling: false,
57
57
  webSecurity: false,
@@ -62,6 +62,57 @@ ewm.create({
62
62
 
63
63
  完整的控制接口实现参见[example](./example)。
64
64
 
65
+ ### BrowserView 排序功能
66
+
67
+ 当创建BrowserView时,可以通过`zIndex`参数来控制BrowserView的显示顺序。数值越小,BrowserView越靠前显示。
68
+
69
+ ```javascript
70
+ // 创建具有不同zIndex层级的BrowserView
71
+ windowsManager.create({
72
+ type: 'BV',
73
+ name: 'background-view',
74
+ url: 'http://localhost:8000/background',
75
+ zIndex: 10, // zIndex较大,显示在后面
76
+ browserWindow: {
77
+ parent: mainWindowId
78
+ }
79
+ });
80
+
81
+ windowsManager.create({
82
+ type: 'BV',
83
+ name: 'foreground-view',
84
+ url: 'http://localhost:8000/foreground',
85
+ zIndex: 1, // zIndex较小,显示在前面
86
+ browserWindow: {
87
+ parent: mainWindowId
88
+ }
89
+ });
90
+ ```
91
+
92
+ #### 排序优化选项
93
+
94
+ 为了避免频繁排序导致的闪烁问题,提供了以下选项:
95
+
96
+ 1. **禁用自动排序**:在创建时设置 `disableAutoSort: true`
97
+ ```javascript
98
+ windowsManager.create({
99
+ type: 'BV',
100
+ name: 'manual-sort-view',
101
+ url: 'http://localhost:8000/view',
102
+ zIndex: 5,
103
+ disableAutoSort: true, // 禁用自动排序
104
+ browserWindow: {
105
+ parent: mainWindowId
106
+ }
107
+ });
108
+ ```
109
+
110
+ 2. **手动排序**:使用 `sortBrowserViews` 方法手动触发排序
111
+ ```javascript
112
+ // 在渲染进程中
113
+ ewm.sortBrowserViews(windowId); // 手动排序指定窗口的BrowserView
114
+ ```
115
+
65
116
  ### 运行 Example
66
117
 
67
118
  - yarn install && cd example/renderer && yarn
package/common/index.d.ts CHANGED
@@ -33,6 +33,10 @@ interface ElectronWindowsManagerOptionsBase {
33
33
  openDevTools?: boolean;
34
34
  preventOriginClose?: boolean;
35
35
  preventOriginNavigate?: boolean;
36
+ /** BrowserView zIndex层级,数值越小越靠前 */
37
+ zIndex?: number;
38
+ /** 是否禁用自动排序,默认false */
39
+ disableAutoSort?: boolean;
36
40
  }
37
41
  export interface BWItem extends BrowserWindow {
38
42
  _id: number;
@@ -44,6 +48,8 @@ export interface BWItem extends BrowserWindow {
44
48
  _extraData?: string;
45
49
  /** 初始化url */
46
50
  _initUrl?: string;
51
+ /** zIndex层级,数值越小越靠前 */
52
+ _zIndex?: number;
47
53
  }
48
54
  export interface BVItem extends BrowserView {
49
55
  id: number;
@@ -56,6 +62,8 @@ export interface BVItem extends BrowserView {
56
62
  _extraData?: string;
57
63
  /** 初始化url */
58
64
  _initUrl?: string;
65
+ /** zIndex层级,数值越小越靠前 */
66
+ _zIndex?: number;
59
67
  }
60
68
  /**
61
69
  * 预加载配置接口
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/common/index.ts"],"names":[],"mappings":"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"}
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;IAChC,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;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;IAClB,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;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;IAClB,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;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;IACnB,gBAAgB;IAChB,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,aAAa,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3M"}
@@ -33,6 +33,10 @@ interface ElectronWindowsManagerOptionsBase {
33
33
  openDevTools?: boolean;
34
34
  preventOriginClose?: boolean;
35
35
  preventOriginNavigate?: boolean;
36
+ /** BrowserView zIndex层级,数值越小越靠前 */
37
+ zIndex?: number;
38
+ /** 是否禁用自动排序,默认false */
39
+ disableAutoSort?: boolean;
36
40
  }
37
41
  export interface BWItem extends BrowserWindow {
38
42
  _id: number;
@@ -44,6 +48,8 @@ export interface BWItem extends BrowserWindow {
44
48
  _extraData?: string;
45
49
  /** 初始化url */
46
50
  _initUrl?: string;
51
+ /** zIndex层级,数值越小越靠前 */
52
+ _zIndex?: number;
47
53
  }
48
54
  export interface BVItem extends BrowserView {
49
55
  id: number;
@@ -56,6 +62,8 @@ export interface BVItem extends BrowserView {
56
62
  _extraData?: string;
57
63
  /** 初始化url */
58
64
  _initUrl?: string;
65
+ /** zIndex层级,数值越小越靠前 */
66
+ _zIndex?: number;
59
67
  }
60
68
  /**
61
69
  * 预加载配置接口
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"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"}
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;IAChC,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;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;IAClB,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;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;IAClB,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;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;IACnB,gBAAgB;IAChB,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,aAAa,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3M"}
@@ -82,6 +82,21 @@ export declare class WindowsManager {
82
82
  private _applyBrowserViewOptions;
83
83
  createPreloadWebContents(url: string): Promise<unknown>;
84
84
  getWindowForWebContentsId(wcId: number): Promise<BWItem | undefined>;
85
+ /**
86
+ * 手动对BrowserView进行排序
87
+ * @param windowId 窗口ID或名称
88
+ */
89
+ sortBrowserViews(windowId: string | number): void;
90
+ /**
91
+ * 防抖的排序方法
92
+ * @param window 目标窗口
93
+ */
94
+ private sortBrowserViewsDebounced;
95
+ /**
96
+ * 对BrowserView进行排序
97
+ * @param window 目标窗口
98
+ */
99
+ private _sortBrowserViews;
85
100
  }
86
101
  export declare let isInitialized: boolean;
87
102
  export declare const initialize: (preload?: string, loadingViewUrl?: string, errorViewUrl?: string, preloadWebContentsConfig?: PreloadWebContentsConfig, webviewDomainWhiteList?: string[]) => WindowsManager;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/main/index.ts"],"names":[],"mappings":"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"}
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
@@ -70,6 +70,13 @@ class WindowsManager {
70
70
  // 创建队列相关属性
71
71
  this.createQueue = [];
72
72
  this.isCreating = false;
73
+ /**
74
+ * 防抖的排序方法
75
+ * @param window 目标窗口
76
+ */
77
+ this.sortBrowserViewsDebounced = lodash.debounce((window) => {
78
+ this._sortBrowserViews(window);
79
+ }, 50);
73
80
  this.preload = preload;
74
81
  this.windows = new Map();
75
82
  this.loadingViewUrl = `${loadingViewUrl ?? ''}`;
@@ -256,6 +263,8 @@ class WindowsManager {
256
263
  try {
257
264
  // @ts-ignore
258
265
  instance._id = instance.webContents.id;
266
+ // 设置默认zIndex层级
267
+ instance._zIndex = 0;
259
268
  }
260
269
  catch (error) {
261
270
  log('error', '预加载 BV 设置 _id 失败', error);
@@ -312,7 +321,7 @@ class WindowsManager {
312
321
  */
313
322
  async _createWindow(options) {
314
323
  let window;
315
- const { usePreload = true, type = 'BW', name = 'anonymous', url, loadingView = { url: undefined }, errorView = { url: undefined }, browserWindow: browserWindowOptions, openDevTools = false, preventOriginClose = false, } = options;
324
+ const { usePreload = true, type = 'BW', name = 'anonymous', url, loadingView = { url: undefined }, errorView = { url: undefined }, browserWindow: browserWindowOptions, openDevTools = false, preventOriginClose = false, zIndex = 0, } = options;
316
325
  options.type = type;
317
326
  // 优先复用预创建实例
318
327
  let preloadWin = null;
@@ -531,6 +540,8 @@ class WindowsManager {
531
540
  window._name = name;
532
541
  window._extraData = `${options?.extraData || ''}`;
533
542
  window._initUrl = `${options?.url || ''}`;
543
+ // 设置zIndex层级
544
+ window._zIndex = options.zIndex ?? 0;
534
545
  log('log', 'create 5: ', window.id, window._id, window._name);
535
546
  if (loadingView?.url) {
536
547
  if (type === 'BW') {
@@ -736,23 +747,44 @@ class WindowsManager {
736
747
  });
737
748
  try {
738
749
  const _addBrowserView = window.addBrowserView;
739
- window.addBrowserView = (view) => {
750
+ window.addBrowserView = (view, notSort = false) => {
740
751
  _addBrowserView.call(window, view);
752
+ if (notSort) {
753
+ return;
754
+ }
741
755
  handleBrowserViewFocus(view);
756
+ // 添加BrowserView后重新排序(如果未禁用自动排序)
757
+ if (!options.disableAutoSort) {
758
+ this.sortBrowserViewsDebounced(window);
759
+ }
742
760
  };
743
761
  const _removeBrowserView = window.removeBrowserView;
744
- window.removeBrowserView = (view) => {
762
+ window.removeBrowserView = (view, notSort = false) => {
745
763
  _removeBrowserView.call(window, view);
764
+ if (notSort) {
765
+ return;
766
+ }
746
767
  handleBrowserViewBlur(view);
768
+ // 移除BrowserView后重新排序(如果未禁用自动排序)
769
+ if (!options.disableAutoSort) {
770
+ this.sortBrowserViewsDebounced(window);
771
+ }
747
772
  };
748
773
  const _setBrowserView = window.setBrowserView;
749
- window.setBrowserView = (view) => {
774
+ window.setBrowserView = (view, notSort = false) => {
750
775
  const views = window.getBrowserViews() || [];
751
776
  for (const view of views) {
752
777
  handleBrowserViewBlur(view);
753
778
  }
754
779
  _setBrowserView.call(window, view);
780
+ if (notSort) {
781
+ return;
782
+ }
755
783
  handleBrowserViewFocus(view);
784
+ // 设置BrowserView后重新排序(如果未禁用自动排序)
785
+ if (!options.disableAutoSort) {
786
+ this.sortBrowserViewsDebounced(window);
787
+ }
756
788
  };
757
789
  }
758
790
  catch (error) {
@@ -790,7 +822,7 @@ class WindowsManager {
790
822
  }
791
823
  const loadLoadingView = () => {
792
824
  const [viewWidth, viewHeight] = window.getSize();
793
- window.setBrowserView(_loadingView);
825
+ window.addBrowserView(_loadingView);
794
826
  _loadingView.setBounds({
795
827
  x: 0,
796
828
  y: 0,
@@ -830,7 +862,7 @@ class WindowsManager {
830
862
  return;
831
863
  }
832
864
  if (_loadingView.webContents && !_loadingView.webContents.isDestroyed()) {
833
- window.setBrowserView(_loadingView);
865
+ window.addBrowserView(_loadingView);
834
866
  }
835
867
  else {
836
868
  // if loadingView has been destroyed
@@ -1186,6 +1218,75 @@ class WindowsManager {
1186
1218
  return win;
1187
1219
  return undefined;
1188
1220
  }
1221
+ /**
1222
+ * 手动对BrowserView进行排序
1223
+ * @param windowId 窗口ID或名称
1224
+ */
1225
+ sortBrowserViews(windowId) {
1226
+ const window = this.get(windowId);
1227
+ if (window && window._type === 'BW') {
1228
+ this._sortBrowserViews(window);
1229
+ }
1230
+ }
1231
+ /**
1232
+ * 对BrowserView进行排序
1233
+ * @param window 目标窗口
1234
+ */
1235
+ _sortBrowserViews(window) {
1236
+ try {
1237
+ const views = window.getBrowserViews() || [];
1238
+ if (views.length <= 1)
1239
+ return;
1240
+ // 按zIndex层级排序,数值小的在前
1241
+ const sortedViews = views.sort((a, b) => {
1242
+ const zIndexA = a._zIndex ?? 0;
1243
+ const zIndexB = b._zIndex ?? 0;
1244
+ return zIndexA - zIndexB;
1245
+ });
1246
+ // 检查是否已经按正确顺序排列
1247
+ let needsReorder = false;
1248
+ for (let i = 0; i < views.length; i++) {
1249
+ if (views[i] !== sortedViews[i]) {
1250
+ needsReorder = true;
1251
+ break;
1252
+ }
1253
+ }
1254
+ // 如果已经按正确顺序排列,则不需要重新排序
1255
+ if (!needsReorder)
1256
+ return;
1257
+ // 使用批量操作来减少闪烁
1258
+ // 临时隐藏窗口内容
1259
+ const wasVisible = window.isVisible();
1260
+ if (wasVisible) {
1261
+ // window.hide();
1262
+ }
1263
+ // 移除所有BrowserView
1264
+ views.forEach(view => {
1265
+ // @ts-ignore
1266
+ window.removeBrowserView(view, true);
1267
+ });
1268
+ // 按正确顺序重新添加
1269
+ sortedViews.forEach((view, index) => {
1270
+ if (index === 0) {
1271
+ // 第一个设置为当前视图
1272
+ // @ts-ignore
1273
+ window.setBrowserView(view, true);
1274
+ }
1275
+ else {
1276
+ // 其他视图添加到后面
1277
+ // @ts-ignore
1278
+ window.addBrowserView(view, true);
1279
+ }
1280
+ });
1281
+ // 恢复窗口显示
1282
+ if (wasVisible) {
1283
+ // window.show();
1284
+ }
1285
+ }
1286
+ catch (error) {
1287
+ log('error', 'sortBrowserViews error:', error);
1288
+ }
1289
+ }
1189
1290
  }
1190
1291
  // @ts-ignore
1191
1292
  global['__ELECTRON_WINDOWS_MANAGER__'] = undefined;
@@ -1227,12 +1328,16 @@ const initialize = (preload, loadingViewUrl, errorViewUrl, preloadWebContentsCon
1227
1328
  log('error', 'setParentWindow error:', error);
1228
1329
  }
1229
1330
  }
1331
+ if (findWin?._type === 'BV' && opt.data.zIndex) {
1332
+ findWin._zIndex = opt.data.zIndex;
1333
+ }
1230
1334
  return {
1231
1335
  winId: Number(`${findWin?.id || findWin?._id || -1}`),
1232
1336
  winName: `${findWin?._name || ''}`,
1233
1337
  winType: `${findWin?._type || ''}`,
1234
1338
  winExtraData: `${findWin?._extraData || ''}`,
1235
1339
  winInitUrl: `${findWin?._initUrl || ''}`,
1340
+ winZIndex: `${findWin._zIndex || 0}`,
1236
1341
  };
1237
1342
  }
1238
1343
  const res = await wm.create(opt.data);
@@ -1242,6 +1347,7 @@ const initialize = (preload, loadingViewUrl, errorViewUrl, preloadWebContentsCon
1242
1347
  winType: `${res?._type || ''}`,
1243
1348
  winExtraData: `${res?._extraData || ''}`,
1244
1349
  winInitUrl: `${res?._initUrl || ''}`,
1350
+ winZIndex: `${res?._zIndex || 0}`,
1245
1351
  };
1246
1352
  }
1247
1353
  if (data?.type === 'get') {
@@ -1253,6 +1359,7 @@ const initialize = (preload, loadingViewUrl, errorViewUrl, preloadWebContentsCon
1253
1359
  winType: `${res?._type || ''}`,
1254
1360
  winExtraData: `${res?._extraData || ''}`,
1255
1361
  winInitUrl: `${res?._initUrl || ''}`,
1362
+ winZIndex: `${res?._zIndex || 0}`,
1256
1363
  };
1257
1364
  }
1258
1365
  if (data?.type === 'getAll') {
@@ -1266,6 +1373,7 @@ const initialize = (preload, loadingViewUrl, errorViewUrl, preloadWebContentsCon
1266
1373
  winType: `${i?._type || ''}`,
1267
1374
  winExtraData: `${i?._extraData || ''}`,
1268
1375
  winInitUrl: `${i?._initUrl || ''}`,
1376
+ winZIndex: `${i?._zIndex || 0}`,
1269
1377
  };
1270
1378
  });
1271
1379
  return obj;
@@ -1289,6 +1397,7 @@ const initialize = (preload, loadingViewUrl, errorViewUrl, preloadWebContentsCon
1289
1397
  winType: `${res?._type || ''}`,
1290
1398
  winExtraData: `${res?._extraData || ''}`,
1291
1399
  winInitUrl: `${res?._initUrl || ''}`,
1400
+ winZIndex: `${res?._zIndex || 0}`,
1292
1401
  };
1293
1402
  }
1294
1403
  return undefined;
@@ -1303,6 +1412,7 @@ const initialize = (preload, loadingViewUrl, errorViewUrl, preloadWebContentsCon
1303
1412
  winType: `${res?._type || ''}`,
1304
1413
  winExtraData: `${res?._extraData || ''}`,
1305
1414
  winInitUrl: `${res?._initUrl || ''}`,
1415
+ winZIndex: `${res?._zIndex || 0}`,
1306
1416
  };
1307
1417
  }
1308
1418
  return undefined;
@@ -1361,6 +1471,11 @@ const initialize = (preload, loadingViewUrl, errorViewUrl, preloadWebContentsCon
1361
1471
  const res = await wm.createPreloadWebContents(opt.data);
1362
1472
  return res;
1363
1473
  }
1474
+ if (data?.type === 'sortBrowserViews') {
1475
+ const opt = data;
1476
+ wm.sortBrowserViews(opt.data);
1477
+ return true;
1478
+ }
1364
1479
  return undefined;
1365
1480
  });
1366
1481
  return wm;