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

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,8 @@ interface ElectronWindowsManagerOptionsBase {
33
33
  openDevTools?: boolean;
34
34
  preventOriginClose?: boolean;
35
35
  preventOriginNavigate?: boolean;
36
+ /** BrowserView zIndex层级,数值越小越靠前 */
37
+ zIndex?: number;
36
38
  }
37
39
  export interface BWItem extends BrowserWindow {
38
40
  _id: number;
@@ -44,6 +46,8 @@ export interface BWItem extends BrowserWindow {
44
46
  _extraData?: string;
45
47
  /** 初始化url */
46
48
  _initUrl?: string;
49
+ /** zIndex层级,数值越小越靠前 */
50
+ _zIndex?: number;
47
51
  }
48
52
  export interface BVItem extends BrowserView {
49
53
  id: number;
@@ -56,6 +60,8 @@ export interface BVItem extends BrowserView {
56
60
  _extraData?: string;
57
61
  /** 初始化url */
58
62
  _initUrl?: string;
63
+ /** zIndex层级,数值越小越靠前 */
64
+ _zIndex?: number;
59
65
  }
60
66
  /**
61
67
  * 预加载配置接口
@@ -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":"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"}
@@ -33,6 +33,8 @@ interface ElectronWindowsManagerOptionsBase {
33
33
  openDevTools?: boolean;
34
34
  preventOriginClose?: boolean;
35
35
  preventOriginNavigate?: boolean;
36
+ /** BrowserView zIndex层级,数值越小越靠前 */
37
+ zIndex?: number;
36
38
  }
37
39
  export interface BWItem extends BrowserWindow {
38
40
  _id: number;
@@ -44,6 +46,8 @@ export interface BWItem extends BrowserWindow {
44
46
  _extraData?: string;
45
47
  /** 初始化url */
46
48
  _initUrl?: string;
49
+ /** zIndex层级,数值越小越靠前 */
50
+ _zIndex?: number;
47
51
  }
48
52
  export interface BVItem extends BrowserView {
49
53
  id: number;
@@ -56,6 +60,8 @@ export interface BVItem extends BrowserView {
56
60
  _extraData?: string;
57
61
  /** 初始化url */
58
62
  _initUrl?: string;
63
+ /** zIndex层级,数值越小越靠前 */
64
+ _zIndex?: number;
59
65
  }
60
66
  /**
61
67
  * 预加载配置接口
@@ -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":"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"}
@@ -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, view) => {
78
+ this._sortBrowserViews(window, view);
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,37 @@ class WindowsManager {
736
747
  });
737
748
  try {
738
749
  const _addBrowserView = window.addBrowserView;
739
- window.addBrowserView = (view) => {
750
+ window.addBrowserView = (view, isSort = false) => {
740
751
  _addBrowserView.call(window, view);
741
752
  handleBrowserViewFocus(view);
753
+ // 添加BrowserView后重新排序(如果未禁用自动排序)
754
+ log('log', 'addBrowserView-sort', isSort, window.getBrowserViews());
755
+ if (isSort) {
756
+ this.sortBrowserViewsDebounced(window, view);
757
+ }
742
758
  };
743
759
  const _removeBrowserView = window.removeBrowserView;
744
- window.removeBrowserView = (view) => {
760
+ window.removeBrowserView = (view, isSort = false) => {
745
761
  _removeBrowserView.call(window, view);
746
762
  handleBrowserViewBlur(view);
763
+ // 移除BrowserView后重新排序(如果未禁用自动排序)
764
+ log('log', 'removeBrowserView-sort', isSort);
765
+ if (isSort) {
766
+ this.sortBrowserViewsDebounced(window, view);
767
+ }
747
768
  };
748
769
  const _setBrowserView = window.setBrowserView;
749
- window.setBrowserView = (view) => {
770
+ window.setBrowserView = (view, isSort = false) => {
750
771
  const views = window.getBrowserViews() || [];
751
772
  for (const view of views) {
752
773
  handleBrowserViewBlur(view);
753
774
  }
754
775
  _setBrowserView.call(window, view);
755
776
  handleBrowserViewFocus(view);
777
+ log('log', 'setBrowserView-sort', isSort);
778
+ if (isSort) {
779
+ this.sortBrowserViewsDebounced(window, view);
780
+ }
756
781
  };
757
782
  }
758
783
  catch (error) {
@@ -790,7 +815,7 @@ class WindowsManager {
790
815
  }
791
816
  const loadLoadingView = () => {
792
817
  const [viewWidth, viewHeight] = window.getSize();
793
- window.setBrowserView(_loadingView);
818
+ window.addBrowserView(_loadingView);
794
819
  _loadingView.setBounds({
795
820
  x: 0,
796
821
  y: 0,
@@ -830,7 +855,7 @@ class WindowsManager {
830
855
  return;
831
856
  }
832
857
  if (_loadingView.webContents && !_loadingView.webContents.isDestroyed()) {
833
- window.setBrowserView(_loadingView);
858
+ window.addBrowserView(_loadingView);
834
859
  }
835
860
  else {
836
861
  // if loadingView has been destroyed
@@ -1186,6 +1211,80 @@ class WindowsManager {
1186
1211
  return win;
1187
1212
  return undefined;
1188
1213
  }
1214
+ /**
1215
+ * 手动对BrowserView进行排序
1216
+ * @param windowId 窗口ID或名称
1217
+ */
1218
+ sortBrowserViews(windowId) {
1219
+ const window = this.get(windowId);
1220
+ if (window && window._type === 'BW') {
1221
+ this._sortBrowserViews(window);
1222
+ }
1223
+ }
1224
+ /**
1225
+ * 对BrowserView进行排序
1226
+ * @param window 目标窗口
1227
+ */
1228
+ _sortBrowserViews(window, addView) {
1229
+ try {
1230
+ const views = window.getBrowserViews() || [];
1231
+ if (views.length <= 1)
1232
+ return;
1233
+ log('log', 'sortBrowserViews', views?.map(i => i.webContents.id));
1234
+ // 按zIndex层级排序,数值小的在前
1235
+ const sortedViews = views.sort((a, b) => {
1236
+ const zIndexA = a._zIndex ?? 0;
1237
+ const zIndexB = b._zIndex ?? 0;
1238
+ return zIndexA - zIndexB;
1239
+ });
1240
+ // 检查是否已经按正确顺序排列
1241
+ let needsReorder = false;
1242
+ for (let i = 0; i < views.length; i++) {
1243
+ // @ts-ignore
1244
+ if (views[i].webContents.id !== sortedViews[i].webContents.id) {
1245
+ needsReorder = true;
1246
+ break;
1247
+ }
1248
+ }
1249
+ log('log', 'sortBrowserViews needsReorder', needsReorder, sortedViews?.map(i => i.webContents.id));
1250
+ // 如果已经按正确顺序排列,则不需要重新排序
1251
+ if (!needsReorder)
1252
+ return;
1253
+ // 使用批量操作来减少闪烁
1254
+ // 临时隐藏窗口内容
1255
+ const wasVisible = window.isVisible();
1256
+ if (wasVisible) {
1257
+ // window.hide();
1258
+ }
1259
+ // 移除所有BrowserView
1260
+ views.forEach(view => {
1261
+ if (addView?.webContents?.id !== view.webContents.id) {
1262
+ // @ts-ignore
1263
+ window.removeBrowserView(view, false);
1264
+ }
1265
+ });
1266
+ // 按正确顺序重新添加
1267
+ sortedViews.forEach((view, index) => {
1268
+ if (index === 0) {
1269
+ // 第一个设置为当前视图
1270
+ // @ts-ignore
1271
+ window.setBrowserView(view, false);
1272
+ }
1273
+ else {
1274
+ // 其他视图添加到后面
1275
+ // @ts-ignore
1276
+ window.addBrowserView(view, false);
1277
+ }
1278
+ });
1279
+ // 恢复窗口显示
1280
+ if (wasVisible) {
1281
+ // window.show();
1282
+ }
1283
+ }
1284
+ catch (error) {
1285
+ log('error', 'sortBrowserViews error:', error);
1286
+ }
1287
+ }
1189
1288
  }
1190
1289
  // @ts-ignore
1191
1290
  global['__ELECTRON_WINDOWS_MANAGER__'] = undefined;
@@ -1227,12 +1326,16 @@ const initialize = (preload, loadingViewUrl, errorViewUrl, preloadWebContentsCon
1227
1326
  log('error', 'setParentWindow error:', error);
1228
1327
  }
1229
1328
  }
1329
+ if (findWin?._type === 'BV' && opt.data.zIndex) {
1330
+ findWin._zIndex = opt.data.zIndex;
1331
+ }
1230
1332
  return {
1231
1333
  winId: Number(`${findWin?.id || findWin?._id || -1}`),
1232
1334
  winName: `${findWin?._name || ''}`,
1233
1335
  winType: `${findWin?._type || ''}`,
1234
1336
  winExtraData: `${findWin?._extraData || ''}`,
1235
1337
  winInitUrl: `${findWin?._initUrl || ''}`,
1338
+ winZIndex: `${findWin._zIndex || 0}`,
1236
1339
  };
1237
1340
  }
1238
1341
  const res = await wm.create(opt.data);
@@ -1242,6 +1345,7 @@ const initialize = (preload, loadingViewUrl, errorViewUrl, preloadWebContentsCon
1242
1345
  winType: `${res?._type || ''}`,
1243
1346
  winExtraData: `${res?._extraData || ''}`,
1244
1347
  winInitUrl: `${res?._initUrl || ''}`,
1348
+ winZIndex: `${res?._zIndex || 0}`,
1245
1349
  };
1246
1350
  }
1247
1351
  if (data?.type === 'get') {
@@ -1253,6 +1357,7 @@ const initialize = (preload, loadingViewUrl, errorViewUrl, preloadWebContentsCon
1253
1357
  winType: `${res?._type || ''}`,
1254
1358
  winExtraData: `${res?._extraData || ''}`,
1255
1359
  winInitUrl: `${res?._initUrl || ''}`,
1360
+ winZIndex: `${res?._zIndex || 0}`,
1256
1361
  };
1257
1362
  }
1258
1363
  if (data?.type === 'getAll') {
@@ -1266,6 +1371,7 @@ const initialize = (preload, loadingViewUrl, errorViewUrl, preloadWebContentsCon
1266
1371
  winType: `${i?._type || ''}`,
1267
1372
  winExtraData: `${i?._extraData || ''}`,
1268
1373
  winInitUrl: `${i?._initUrl || ''}`,
1374
+ winZIndex: `${i?._zIndex || 0}`,
1269
1375
  };
1270
1376
  });
1271
1377
  return obj;
@@ -1289,6 +1395,7 @@ const initialize = (preload, loadingViewUrl, errorViewUrl, preloadWebContentsCon
1289
1395
  winType: `${res?._type || ''}`,
1290
1396
  winExtraData: `${res?._extraData || ''}`,
1291
1397
  winInitUrl: `${res?._initUrl || ''}`,
1398
+ winZIndex: `${res?._zIndex || 0}`,
1292
1399
  };
1293
1400
  }
1294
1401
  return undefined;
@@ -1303,6 +1410,7 @@ const initialize = (preload, loadingViewUrl, errorViewUrl, preloadWebContentsCon
1303
1410
  winType: `${res?._type || ''}`,
1304
1411
  winExtraData: `${res?._extraData || ''}`,
1305
1412
  winInitUrl: `${res?._initUrl || ''}`,
1413
+ winZIndex: `${res?._zIndex || 0}`,
1306
1414
  };
1307
1415
  }
1308
1416
  return undefined;
@@ -1361,6 +1469,11 @@ const initialize = (preload, loadingViewUrl, errorViewUrl, preloadWebContentsCon
1361
1469
  const res = await wm.createPreloadWebContents(opt.data);
1362
1470
  return res;
1363
1471
  }
1472
+ if (data?.type === 'sortBrowserViews') {
1473
+ const opt = data;
1474
+ wm.sortBrowserViews(opt.data);
1475
+ return true;
1476
+ }
1364
1477
  return undefined;
1365
1478
  });
1366
1479
  return wm;