nexfep 0.4.4 → 0.5.1
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-CN.md +160 -118
- package/README.md +161 -121
- package/cli/build.mjs +108 -99
- package/cli/help.mjs +9 -9
- package/cli/index.mjs +13 -15
- package/cli/timeTyper.mjs +29 -29
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/package.json +31 -22
- package/src/Application.d.ts +6 -4
- package/src/Application.js +12 -5
- package/src/Logger.js +70 -64
- package/src/SingleInstance.d.ts +9 -0
- package/src/SingleInstance.js +17 -0
- package/src/Tray.d.ts +1 -1
- package/src/Tray.js +4 -4
- package/src/WindowManager.d.ts +9 -0
- package/src/WindowManager.js +80 -44
package/README-CN.md
CHANGED
|
@@ -37,13 +37,13 @@ pnpm add nexfep
|
|
|
37
37
|
## 快速开始
|
|
38
38
|
|
|
39
39
|
```typescript
|
|
40
|
-
import { Application } from
|
|
40
|
+
import { Application } from "nexfep";
|
|
41
41
|
|
|
42
42
|
const app = new Application();
|
|
43
43
|
|
|
44
44
|
const window = await app.windows.createWindow(true, false);
|
|
45
45
|
|
|
46
|
-
await window.loadHTML(
|
|
46
|
+
await window.loadHTML("<h1 nexfep-area-drag>Hello Nexfep!</h1>");
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
## 使用指南
|
|
@@ -53,21 +53,21 @@ await window.loadHTML('<h1 nexfep-area-drag>Hello Nexfep!</h1>');
|
|
|
53
53
|
`Application` 是框架的主入口,负责管理应用生命周期,提供窗口、系统托盘和日志的访问。
|
|
54
54
|
|
|
55
55
|
```typescript
|
|
56
|
-
import { Application } from
|
|
56
|
+
import { Application } from "nexfep";
|
|
57
57
|
|
|
58
58
|
const app = new Application();
|
|
59
59
|
// 或指定自定义 WebView2 用户数据目录(仅 Windows 生效)
|
|
60
|
-
const app = new Application({ WindowsWebview2UserDataFolder:
|
|
60
|
+
const app = new Application({ WindowsWebview2UserDataFolder: "C:\\custom\\webview2-data" });
|
|
61
61
|
// 或指定日志文件路径
|
|
62
|
-
const app = new Application({ LogFilePath:
|
|
62
|
+
const app = new Application({ LogFilePath: "./app.log" });
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
**构造函数参数**
|
|
66
66
|
|
|
67
|
-
| 选项
|
|
68
|
-
|
|
67
|
+
| 选项 | 类型 | 默认值 | 说明 |
|
|
68
|
+
| ------------------------------- | ---------------- | ------------------------------------------------ | ----------------------------------- |
|
|
69
69
|
| `WindowsWebview2UserDataFolder` | `string`(可选) | `%LOCALAPPDATA%\NexfepDevelopment.webview2-data` | WebView2 用户数据目录(仅 Windows) |
|
|
70
|
-
| `LogFilePath`
|
|
70
|
+
| `LogFilePath` | `string`(可选) | 无 | 日志文件输出路径 |
|
|
71
71
|
|
|
72
72
|
**属性**
|
|
73
73
|
|
|
@@ -78,6 +78,7 @@ const app = new Application({ LogFilePath: './app.log' });
|
|
|
78
78
|
**方法**
|
|
79
79
|
|
|
80
80
|
- `createTray(options)` — 创建系统托盘图标和右键菜单
|
|
81
|
+
- `createLocker(appName)` — 创建应用实例锁,防止多个实例运行
|
|
81
82
|
- `exit()` — 退出应用
|
|
82
83
|
|
|
83
84
|
### Logger
|
|
@@ -85,21 +86,21 @@ const app = new Application({ LogFilePath: './app.log' });
|
|
|
85
86
|
Logger 支持文件输出和彩色控制台输出,可通过 `app.logger` 访问。
|
|
86
87
|
|
|
87
88
|
```typescript
|
|
88
|
-
app.logger.log(
|
|
89
|
-
app.logger.error(
|
|
90
|
-
app.logger.warn(
|
|
91
|
-
app.logger.info(
|
|
92
|
-
app.logger.debug(
|
|
89
|
+
app.logger.log("Hello World");
|
|
90
|
+
app.logger.error("发生错误");
|
|
91
|
+
app.logger.warn("警告信息");
|
|
92
|
+
app.logger.info("提示信息");
|
|
93
|
+
app.logger.debug("调试信息");
|
|
93
94
|
```
|
|
94
95
|
|
|
95
96
|
**方法**
|
|
96
97
|
|
|
97
|
-
| 方法
|
|
98
|
-
|
|
99
|
-
| `log(message)`
|
|
98
|
+
| 方法 | 说明 |
|
|
99
|
+
| ---------------- | -------------------- |
|
|
100
|
+
| `log(message)` | 记录日志 |
|
|
100
101
|
| `error(message)` | 记录错误日志(红色) |
|
|
101
|
-
| `warn(message)`
|
|
102
|
-
| `info(message)`
|
|
102
|
+
| `warn(message)` | 记录警告日志(黄色) |
|
|
103
|
+
| `info(message)` | 记录提示日志(蓝色) |
|
|
103
104
|
| `debug(message)` | 记录调试日志(灰色) |
|
|
104
105
|
|
|
105
106
|
每个方法接受字符串或字符串数组作为参数。
|
|
@@ -108,24 +109,55 @@ app.logger.debug('调试信息');
|
|
|
108
109
|
|
|
109
110
|
页面中的 `console.log`、`console.error`、`console.info`、`console.warn`、`console.debug` 调用会被自动拦截并转发到主进程 Logger,输出中包含来源窗口的 ID。
|
|
110
111
|
|
|
112
|
+
### 应用单例锁
|
|
113
|
+
|
|
114
|
+
通过 `app.createLocker()` 设置应用单例锁。
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
const locker = app.createLocker("my-app");
|
|
118
|
+
try {
|
|
119
|
+
// 尝试获取应用实例锁
|
|
120
|
+
await locker.lock();
|
|
121
|
+
} catch {
|
|
122
|
+
// 应用实例已存在,退出应用
|
|
123
|
+
app.exit();
|
|
124
|
+
}
|
|
125
|
+
// 在其它实例抢锁时聚焦当前实例
|
|
126
|
+
locker.whenLost(() => {
|
|
127
|
+
if (!win.isFocused()) {
|
|
128
|
+
win.focus();
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
// 释放锁
|
|
132
|
+
locker.unlock();
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**方法**
|
|
136
|
+
|
|
137
|
+
| 方法 | 描述 |
|
|
138
|
+
| -------------------- | ------------------------ |
|
|
139
|
+
| `lock()` | 尝试获取应用实例锁 |
|
|
140
|
+
| `whenLost(callback)` | 当其它实例抢锁时执行回调 |
|
|
141
|
+
| `unlock()` | 释放锁 |
|
|
142
|
+
|
|
111
143
|
### 托盘图标
|
|
112
144
|
|
|
113
145
|
通过 `app.createTray()` 创建和管理系统托盘图标及右键菜单。
|
|
114
146
|
|
|
115
147
|
```typescript
|
|
116
|
-
import { readFileSync } from
|
|
148
|
+
import { readFileSync } from "fs";
|
|
117
149
|
|
|
118
150
|
const tray = app.createTray({
|
|
119
|
-
id:
|
|
120
|
-
tooltip:
|
|
151
|
+
id: "my-tray",
|
|
152
|
+
tooltip: "我的应用",
|
|
121
153
|
icon: {
|
|
122
|
-
data: readFileSync(
|
|
154
|
+
data: readFileSync("./icon.png"),
|
|
123
155
|
width: 32,
|
|
124
156
|
height: 32,
|
|
125
157
|
},
|
|
126
158
|
menuItems: [
|
|
127
|
-
{ id:
|
|
128
|
-
{ id:
|
|
159
|
+
{ id: "show", label: "显示窗口" },
|
|
160
|
+
{ id: "quit", label: "退出" },
|
|
129
161
|
],
|
|
130
162
|
});
|
|
131
163
|
```
|
|
@@ -134,32 +166,32 @@ const tray = app.createTray({
|
|
|
134
166
|
|
|
135
167
|
```typescript
|
|
136
168
|
interface TrayIconImage {
|
|
137
|
-
data: Buffer;
|
|
138
|
-
width?: number;
|
|
139
|
-
height?: number;
|
|
169
|
+
data: Buffer; // 图片二进制数据
|
|
170
|
+
width?: number; // 可选宽度
|
|
171
|
+
height?: number; // 可选高度
|
|
140
172
|
}
|
|
141
173
|
```
|
|
142
174
|
|
|
143
175
|
**方法**
|
|
144
176
|
|
|
145
|
-
| 方法
|
|
146
|
-
|
|
147
|
-
| `addMenuItem(item)`
|
|
148
|
-
| `removeMenuItem(id)`
|
|
149
|
-
| `setMenuItems(items)`
|
|
150
|
-
| `setIcon(icon, width?, height?)`
|
|
151
|
-
| `setTooltip(tooltip)`
|
|
152
|
-
| `on(event, callback)`
|
|
153
|
-
| `show()`
|
|
154
|
-
| `hide()`
|
|
155
|
-
| `destroy()`
|
|
177
|
+
| 方法 | 描述 |
|
|
178
|
+
| -------------------------------- | ------------------------------------------------------ |
|
|
179
|
+
| `addMenuItem(item)` | 添加菜单项 |
|
|
180
|
+
| `removeMenuItem(id)` | 按 ID 删除菜单项 |
|
|
181
|
+
| `setMenuItems(items)` | 替换所有菜单项 |
|
|
182
|
+
| `setIcon(icon, width?, height?)` | 更改托盘图标(原始像素数据 `Uint8Array` / `number[]`) |
|
|
183
|
+
| `setTooltip(tooltip)` | 更改悬停提示文本 |
|
|
184
|
+
| `on(event, callback)` | 监听托盘事件(如 `'click'`) |
|
|
185
|
+
| `show()` | 显示托盘图标 |
|
|
186
|
+
| `hide()` | 隐藏托盘图标 |
|
|
187
|
+
| `destroy()` | 销毁托盘图标 |
|
|
156
188
|
|
|
157
189
|
```typescript
|
|
158
|
-
tray.on(
|
|
159
|
-
console.log(
|
|
190
|
+
tray.on("click", () => {
|
|
191
|
+
console.log("托盘被点击");
|
|
160
192
|
});
|
|
161
|
-
tray.addMenuItem({ id:
|
|
162
|
-
tray.setTooltip(
|
|
193
|
+
tray.addMenuItem({ id: "about", label: "关于" });
|
|
194
|
+
tray.setTooltip("Nexfep 应用");
|
|
163
195
|
```
|
|
164
196
|
|
|
165
197
|
### 桌面通知
|
|
@@ -167,7 +199,7 @@ tray.setTooltip('Nexfep 应用');
|
|
|
167
199
|
通过 `app.utils.notify()` 发送桌面通知。
|
|
168
200
|
|
|
169
201
|
```typescript
|
|
170
|
-
const notification = app.utils.notify(
|
|
202
|
+
const notification = app.utils.notify("标题", "通知内容");
|
|
171
203
|
```
|
|
172
204
|
|
|
173
205
|
**参数**
|
|
@@ -202,7 +234,8 @@ window.hide();
|
|
|
202
234
|
window.maximize();
|
|
203
235
|
window.minimize();
|
|
204
236
|
window.close();
|
|
205
|
-
window.
|
|
237
|
+
window.focus();
|
|
238
|
+
window.setTitle("新标题");
|
|
206
239
|
window.setSize(800, 600);
|
|
207
240
|
window.openDevTools();
|
|
208
241
|
```
|
|
@@ -214,7 +247,7 @@ window.openDevTools();
|
|
|
214
247
|
在页面中通过 `window.postMessage` 发送消息:
|
|
215
248
|
|
|
216
249
|
```javascript
|
|
217
|
-
window.postMessage({ hello:
|
|
250
|
+
window.postMessage({ hello: "world" });
|
|
218
251
|
```
|
|
219
252
|
|
|
220
253
|
**参数说明**
|
|
@@ -243,8 +276,8 @@ pool.onCustomMessage = (window, data) => {
|
|
|
243
276
|
在页面中通过 `window.invoke` 触发事件:
|
|
244
277
|
|
|
245
278
|
```javascript
|
|
246
|
-
window.invoke(
|
|
247
|
-
window.invoke(
|
|
279
|
+
window.invoke("hello");
|
|
280
|
+
window.invoke("hello", "world");
|
|
248
281
|
```
|
|
249
282
|
|
|
250
283
|
**参数说明**
|
|
@@ -257,8 +290,8 @@ window.invoke('hello', 'world');
|
|
|
257
290
|
在主进程中通过 `pool.handle` 监听事件:
|
|
258
291
|
|
|
259
292
|
```typescript
|
|
260
|
-
pool.handle(
|
|
261
|
-
console.log(
|
|
293
|
+
pool.handle("hello", (data) => {
|
|
294
|
+
console.log("收到事件 hello:", data);
|
|
262
295
|
});
|
|
263
296
|
```
|
|
264
297
|
|
|
@@ -272,8 +305,8 @@ pool.handle('hello', (data) => {
|
|
|
272
305
|
在主进程中通过 `pool.unhandle` 取消监听事件:
|
|
273
306
|
|
|
274
307
|
```typescript
|
|
275
|
-
pool.unhandle(
|
|
276
|
-
console.log(
|
|
308
|
+
pool.unhandle("hello", (data) => {
|
|
309
|
+
console.log("收到事件 hello:", data);
|
|
277
310
|
});
|
|
278
311
|
```
|
|
279
312
|
|
|
@@ -289,7 +322,7 @@ pool.unhandle('hello', (data) => {
|
|
|
289
322
|
在页面中通过 `window.setGlobal` 设置全局变量:
|
|
290
323
|
|
|
291
324
|
```javascript
|
|
292
|
-
window.setGlobal(
|
|
325
|
+
window.setGlobal("hello", "world");
|
|
293
326
|
```
|
|
294
327
|
|
|
295
328
|
**参数说明**
|
|
@@ -302,7 +335,7 @@ window.setGlobal('hello', 'world');
|
|
|
302
335
|
在页面中通过 `window.getGlobal` 获取全局变量:
|
|
303
336
|
|
|
304
337
|
```javascript
|
|
305
|
-
const value = await window.getGlobal(
|
|
338
|
+
const value = await window.getGlobal("hello");
|
|
306
339
|
```
|
|
307
340
|
|
|
308
341
|
**参数说明**
|
|
@@ -315,8 +348,8 @@ const value = await window.getGlobal('hello');
|
|
|
315
348
|
|
|
316
349
|
```typescript
|
|
317
350
|
const globals = pool.global;
|
|
318
|
-
globals.set(
|
|
319
|
-
const value = globals.get(
|
|
351
|
+
globals.set("hello", "world");
|
|
352
|
+
const value = globals.get("hello");
|
|
320
353
|
```
|
|
321
354
|
|
|
322
355
|
### 窗口间通信
|
|
@@ -328,7 +361,7 @@ const value = globals.get('hello');
|
|
|
328
361
|
通过 `window.broadcast` 向所有其他打开的窗口发送事件:
|
|
329
362
|
|
|
330
363
|
```javascript
|
|
331
|
-
window.broadcast(
|
|
364
|
+
window.broadcast("user-login", { userId: 123 });
|
|
332
365
|
```
|
|
333
366
|
|
|
334
367
|
**参数说明**
|
|
@@ -339,8 +372,8 @@ window.broadcast('user-login', { userId: 123 });
|
|
|
339
372
|
其他窗口通过 `window.addEventListener` 监听广播事件:
|
|
340
373
|
|
|
341
374
|
```javascript
|
|
342
|
-
window.addEventListener(
|
|
343
|
-
console.log(
|
|
375
|
+
window.addEventListener("user-login", (event) => {
|
|
376
|
+
console.log("用户已登录:", event.detail);
|
|
344
377
|
});
|
|
345
378
|
```
|
|
346
379
|
|
|
@@ -349,7 +382,7 @@ window.addEventListener('user-login', (event) => {
|
|
|
349
382
|
通过 `window.tell` 向指定 ID 的窗口发送消息:
|
|
350
383
|
|
|
351
384
|
```javascript
|
|
352
|
-
window.tell(2,
|
|
385
|
+
window.tell(2, "custom-message", { text: "你好,窗口2" });
|
|
353
386
|
```
|
|
354
387
|
|
|
355
388
|
**参数说明**
|
|
@@ -361,15 +394,15 @@ window.tell(2, 'custom-message', { text: '你好,窗口2' });
|
|
|
361
394
|
目标窗口通过 `window.addEventListener` 接收消息:
|
|
362
395
|
|
|
363
396
|
```javascript
|
|
364
|
-
window.addEventListener(
|
|
365
|
-
console.log(
|
|
397
|
+
window.addEventListener("custom-message", (event) => {
|
|
398
|
+
console.log("收到消息:", event.detail);
|
|
366
399
|
});
|
|
367
400
|
```
|
|
368
401
|
|
|
369
402
|
每个窗口的 ID 可通过 `window.id` 获取:
|
|
370
403
|
|
|
371
404
|
```javascript
|
|
372
|
-
console.log(
|
|
405
|
+
console.log("当前窗口 ID:", window.id);
|
|
373
406
|
```
|
|
374
407
|
|
|
375
408
|
### 窗口控制函数
|
|
@@ -377,20 +410,20 @@ console.log('当前窗口 ID:', window.id);
|
|
|
377
410
|
页面中可直接调用以下注入函数进行窗口控制:
|
|
378
411
|
|
|
379
412
|
```javascript
|
|
380
|
-
window.close();
|
|
381
|
-
window.minimize();
|
|
382
|
-
window.unminimize();
|
|
383
|
-
window.maximize();
|
|
384
|
-
window.unmaximize();
|
|
385
|
-
window.setTitle(
|
|
386
|
-
window.openDevTools();
|
|
387
|
-
window.closeDevTools();
|
|
413
|
+
window.close(); // 关闭窗口
|
|
414
|
+
window.minimize(); // 最小化窗口
|
|
415
|
+
window.unminimize(); // 还原最小化的窗口
|
|
416
|
+
window.maximize(); // 最大化窗口
|
|
417
|
+
window.unmaximize(); // 还原最大化的窗口
|
|
418
|
+
window.setTitle("标题"); // 设置窗口标题
|
|
419
|
+
window.openDevTools(); // 打开开发者工具
|
|
420
|
+
window.closeDevTools(); // 关闭开发者工具
|
|
388
421
|
```
|
|
389
422
|
|
|
390
423
|
页面中还可访问以下属性:
|
|
391
424
|
|
|
392
425
|
```javascript
|
|
393
|
-
console.log(window.id);
|
|
426
|
+
console.log(window.id); // 窗口唯一标识
|
|
394
427
|
console.log(window.isNexfepLoadDone); // 窗口是否已加载完成
|
|
395
428
|
```
|
|
396
429
|
|
|
@@ -449,8 +482,8 @@ console.log(window.isNexfepLoadDone); // 窗口是否已加载完成
|
|
|
449
482
|
WebView 窗口加载完成后会触发 `nexfep-load-done` 事件:
|
|
450
483
|
|
|
451
484
|
```javascript
|
|
452
|
-
window.addEventListener(
|
|
453
|
-
console.log(
|
|
485
|
+
window.addEventListener("nexfep-load-done", () => {
|
|
486
|
+
console.log("Nexfep 窗口加载完成");
|
|
454
487
|
});
|
|
455
488
|
```
|
|
456
489
|
|
|
@@ -484,17 +517,17 @@ npx nexfep build [options]
|
|
|
484
517
|
|
|
485
518
|
#### 选项
|
|
486
519
|
|
|
487
|
-
| 选项
|
|
488
|
-
|
|
489
|
-
| `-n, --name <name>`
|
|
490
|
-
| `-e, --entry <file>`
|
|
491
|
-
| `-o, --output <dir>`
|
|
492
|
-
| `-i, --ignore <pattern>`
|
|
493
|
-
| `-c, --console`
|
|
494
|
-
| `-r, --reinstall`
|
|
495
|
-
| `-s, --skip-clean`
|
|
496
|
-
| `-u, --upx <level>`
|
|
497
|
-
| `-m, --meta, --metadata <file>` | 元数据文件路径(默认:无)
|
|
520
|
+
| 选项 | 说明 |
|
|
521
|
+
| ------------------------------- | -------------------------------------------- |
|
|
522
|
+
| `-n, --name <name>` | 应用名称(默认:来自 package.json) |
|
|
523
|
+
| `-e, --entry <file>` | 入口文件路径(默认:来自 package.json main) |
|
|
524
|
+
| `-o, --output <dir>` | 输出目录(默认:dist) |
|
|
525
|
+
| `-i, --ignore <pattern>` | 要忽略的文件或目录(可多次使用) |
|
|
526
|
+
| `-c, --console` | 在 Windows 上显示控制台窗口(默认:false) |
|
|
527
|
+
| `-r, --reinstall` | 构建前仅重新安装生产依赖 |
|
|
528
|
+
| `-s, --skip-clean` | 跳过清理旧的构建文件 |
|
|
529
|
+
| `-u, --upx <level>` | 使用 UPX 压缩可执行文件,级别 0-9(默认:0) |
|
|
530
|
+
| `-m, --meta, --metadata <file>` | 元数据文件路径(默认:无) |
|
|
498
531
|
|
|
499
532
|
#### 示例
|
|
500
533
|
|
|
@@ -529,46 +562,55 @@ nexfep build -u 7
|
|
|
529
562
|
|
|
530
563
|
### Application
|
|
531
564
|
|
|
532
|
-
| 方法/属性
|
|
533
|
-
|
|
534
|
-
| `constructor(options?)` | `{ WindowsWebview2UserDataFolder?, LogFilePath? }` | Application | 创建应用实例
|
|
535
|
-
| `windows`
|
|
536
|
-
| `utils`
|
|
537
|
-
| `logger`
|
|
538
|
-
| `createTray(options)`
|
|
539
|
-
| `exit()`
|
|
565
|
+
| 方法/属性 | 参数 | 返回值 | 说明 |
|
|
566
|
+
| ----------------------- | -------------------------------------------------- | ----------- | ---------------- |
|
|
567
|
+
| `constructor(options?)` | `{ WindowsWebview2UserDataFolder?, LogFilePath? }` | Application | 创建应用实例 |
|
|
568
|
+
| `windows` | / | WindowPool | 窗口池实例 |
|
|
569
|
+
| `utils` | / | \_\_Utils | 工具方法(通知) |
|
|
570
|
+
| `logger` | / | Logger | 日志实例 |
|
|
571
|
+
| `createTray(options)` | 见 Tray 章节 | Tray | 创建系统托盘图标 |
|
|
572
|
+
| `exit()` | 无 | void | 退出应用 |
|
|
540
573
|
|
|
541
574
|
### WindowPool
|
|
542
575
|
|
|
543
|
-
| 方法/属性
|
|
544
|
-
|
|
545
|
-
| `createWindow(isShow?, isDecorated?)` | `isShow`: boolean(默认 true), `isDecorated`: boolean(默认 true) | Promise\<Window>
|
|
546
|
-
| `handle(event, callback)`
|
|
547
|
-
| `unhandle(event, callback)`
|
|
548
|
-
| `global`
|
|
549
|
-
| `closeWindow(window)`
|
|
550
|
-
| `onCustomMessage`
|
|
576
|
+
| 方法/属性 | 参数 | 返回值 | 说明 |
|
|
577
|
+
| ------------------------------------- | ------------------------------------------------------------------- | ----------------- | ------------------------ |
|
|
578
|
+
| `createWindow(isShow?, isDecorated?)` | `isShow`: boolean(默认 true), `isDecorated`: boolean(默认 true) | Promise\<Window> | 创建并获取一个窗口 |
|
|
579
|
+
| `handle(event, callback)` | `event`: string, `callback`: (data: any) => any | 无 | 监听指定事件 |
|
|
580
|
+
| `unhandle(event, callback)` | `event`: string, `callback`: (data: any) => any | 无 | 取消监听指定事件 |
|
|
581
|
+
| `global` | / | Map\<string, any> | 全局变量 Map |
|
|
582
|
+
| `closeWindow(window)` | `window`: Window | Promise\<void> | 关闭指定窗口并回收至池中 |
|
|
583
|
+
| `onCustomMessage` | `(window: Window, data: string) => void` | 无 | 自定义消息回调函数 |
|
|
551
584
|
|
|
552
585
|
### Window
|
|
553
586
|
|
|
554
|
-
| 方法/属性
|
|
555
|
-
|
|
556
|
-
| `loadURL(url)`
|
|
557
|
-
| `loadHTML(html)`
|
|
558
|
-
| `show()`
|
|
559
|
-
| `hide()`
|
|
560
|
-
| `maximize()`
|
|
561
|
-
| `unMaximize()`
|
|
562
|
-
| `minimize()`
|
|
563
|
-
| `unMinimize()`
|
|
564
|
-
| `close()`
|
|
565
|
-
| `setTitle(title)`
|
|
566
|
-
| `setDecorated(isDecorated)` | `isDecorated`: boolean
|
|
567
|
-
| `resizable(resizable)`
|
|
568
|
-
| `setSize(width, height)`
|
|
569
|
-
| `
|
|
570
|
-
| `
|
|
571
|
-
| `
|
|
587
|
+
| 方法/属性 | 参数 | 返回值 | 说明 |
|
|
588
|
+
| --------------------------- | --------------------------------- | --------------------------------- | -------------------------- |
|
|
589
|
+
| `loadURL(url)` | `url`: string — 要加载的网页地址 | Promise\<void> | 加载指定 URL |
|
|
590
|
+
| `loadHTML(html)` | `html`: string — HTML 字符串 | Promise\<void> | 加载指定 HTML 内容 |
|
|
591
|
+
| `show()` | 无 | void | 显示窗口 |
|
|
592
|
+
| `hide()` | 无 | void | 隐藏窗口 |
|
|
593
|
+
| `maximize()` | 无 | void | 最大化窗口 |
|
|
594
|
+
| `unMaximize()` | 无 | void | 还原窗口(取消最大化) |
|
|
595
|
+
| `minimize()` | 无 | void | 最小化窗口 |
|
|
596
|
+
| `unMinimize()` | 无 | void | 还原窗口(取消最小化) |
|
|
597
|
+
| `close()` | 无 | void | 关闭窗口并回收至池中 |
|
|
598
|
+
| `setTitle(title)` | `title`: string | void | 设置窗口标题 |
|
|
599
|
+
| `setDecorated(isDecorated)` | `isDecorated`: boolean | void | 设置窗口是否带边框和标题栏 |
|
|
600
|
+
| `resizable(resizable)` | `resizable`: boolean | void | 设置窗口是否可调整大小 |
|
|
601
|
+
| `setSize(width, height)` | `width`: number, `height`: number | void | 设置窗口尺寸(像素) |
|
|
602
|
+
| `getSize()` | 无 | { width: number, height: number } | 获取窗口尺寸(像素) |
|
|
603
|
+
| `setPosition(x, y)` | `x`: number, `y`: number | void | 设置窗口位置(像素) |
|
|
604
|
+
| `getPosition()` | 无 | { x: number, y: number } | 获取窗口位置(像素) |
|
|
605
|
+
| `focus()` | 无 | void | 窗口获取焦点 |
|
|
606
|
+
| `isFocused()` | 无 | boolean | 是否有焦点 |
|
|
607
|
+
| `isMaximized()` | 无 | boolean | 是否最大化 |
|
|
608
|
+
| `isMinimized()` | 无 | boolean | 是否最小化 |
|
|
609
|
+
| `toggleMaximize()` | 无 | void | 切换最大化状态 |
|
|
610
|
+
| `toggleMinimize()` | 无 | void | 切换最小化状态 |
|
|
611
|
+
| `openDevTools()` | 无 | void | 打开开发者工具 |
|
|
612
|
+
| `closeDevTools()` | 无 | void | 关闭开发者工具 |
|
|
613
|
+
| `id` | 无 | number | 窗口唯一标识,自增编号 |
|
|
572
614
|
|
|
573
615
|
## 开发
|
|
574
616
|
|