跳转到主文档

winService

补充信息
import { winService } from '@modern-js/runtime/electron-render';

实例方法

broadCast

winService.broadcast(channel[,...args])

参数

  • channel:string, 广播频道名。
  • [args]any[],广播参数。

返回值

  • void

给所有窗口在 channel 频道上发送消息。

sendTo

winService.sendTo(receiver,channel[,...args])

参数

  • receiver:number | string,接收窗口 ID 或者窗口名。
  • channel:string, 通信频道名。
  • [args]any[] 访问服务函数的参数。

返回值

  • void

根据窗口名字或者 ID 发送消息到 channel 频道。

closeWindowByName

winService.closeWindowByName(name[,options])

参数

  • name:string,窗口名。
  • [options]object,关闭模式。
    • [closeMode]'close' | 'confirmOrClose',当 closeMode=close 时,会直接关闭,忽略回调。当 closeMode=confirmOrClose,如果有确认回调,会执行确认回调,默认为:confirmOrClose

返回值

  • Promise<boolean>,是否关闭成功。

根据窗口名关闭窗口。

closeWindowById

winService.closeWindowById(id[,options])

参数

  • id:number,窗口 ID。
  • [options]object,关闭模式。
    • [closeMode]'close' | 'confirmOrClose',当 closeMode=close 时,会直接关闭,忽略回调。当 closeMode=confirmOrClose,如果有确认回调,会执行确认回调,默认为:confirmOrClose

默认值

  • Promise<boolean>,是否关闭成功。

根据窗口 ID 关闭窗口。

closeCurrentWindow

winService.closeCurrentWindow()

返回值

  • Promise<boolean>,是否关闭成功。

关闭当前窗口。

callOtherWindow

winService.callOtherWindow(receiver,funcName[,...args])

参数

  • receiver:string | number 窗口的 ID 或者窗口的名字。
  • funcName:string 访问的服务的函数名。
  • [args]any[] 访问服务函数的参数。

返回值

  • Promise<any> 服务访问结果。
警告
  • receiver 为窗口名,并且同名窗口打开多个,此时 callBrowserWindow 的返回值为数组,每一项表示每一个窗口的执行结果。
  • 当有且仅有一个窗口的时候,返回结果仅仅为该窗口的函数执行结果,不是数组。

registerBeforeClose

winService.registerBeforeClose(callback)

参数

  • callback:(reason: Object) => boolean | Promise<boolean>,窗口关闭前确认回调,返回 false 则取消关闭,否则继续关闭。
    • reason:Object,关闭原因。

返回值

  • IDisposable,返回消息监听引用,可使用 .dispose() 解除监听。
export enum CloseReason {
/** Window is closed */
CLOSE = 1,

/** Application is quit */
QUIT = 2,

/** Window is reloaded */
RELOAD = 3,

/** Other configuration loaded into window */
LOAD = 4,
}
  • 窗口关闭前,可注册确认关闭函数,根据返回结果决定窗口是否关闭。
  • 可注册多个事件,若有一个事件取消关闭,则窗口不再关闭。

registerWillClose

winService.registerWillClose(callback)

参数

  • callback:(reason: CloseReason) => boolean | Promise<boolean>,即将关闭窗口处理函数。

返回值

  • IDisposable,返回消息监听引用,可使用 .dispose() 解除监听。

窗口即将关闭,注册关闭前收尾工作函数,不能阻止窗口关闭。

registerServices

winService.registerServices(services)

参数

  • services:{ [key: string]: unknown },需要注册的服务。

返回值

  • void
  registerServices(services: { [key: string]: unknown }): void;

注册服务,供其余窗口访问。

补充信息

更多关于服务注册:双向通信

onMessage

winService.onMessage(channel)

参数

  • channel:string,频道名。

返回值

  • object,返回仅监听 channel 频道的事件监听器。

返回仅监听 channel 频道的事件监听器。

补充信息

更多关于服务注册:双向通信

disposeWebviewConnection

winService.disposeWebviewConnection(webviewIds)

参数

  • webviewIds:string[],所有 webview 的 ID。

返回值

  • Promise<void>

关闭所有 webview 与主进程的通信连接。这一般会在组件写在前执行。窗口关闭时,会默认执行此逻辑。

示例

import  { winService } from '@modern-js/runtime/electron-render';
...

// 向窗口 main 发送消息 `{data: "hello"}` 到 `msgChannel` 频道。
winService.callOtherWindow('main', 'msgChannel', {data: "hello"});

// 向所有窗口发送消息 `{data: "hello"}` 到 `msgChannel` 频道。
winService.broadCast('msgChannel', {data: "hello"});

// 监听 'ON_HELLO' 频道消息
const onHello = winService.onMessage('ON_HELLO');
const listener = onHello((msg) => { console.log('handle onHello ') });

// 注册服务
winService.registerServices({
readFile: () => {
console.log('read file');
}
});

// 关闭当前窗口
winService.closeCurrentWindow();

窗口即将关闭,是否继续关闭。

// 窗口即将关闭,是否继续关闭
const onBeforeCloseListener = winService.registerBeforeClose(
() => {
return new Promise((resolve, reject) => {
Modal.confirm({
title: '确定要退出应用吗',
okText: '退出',
cancelText: '取消',
icon: null,
async onOk() {
return resolve(false);
},
onCancel() {
return resolve(true);
},
});
});
}
);

onBeforeCloseListener.dispose();

窗口即将关闭,你可以做一些事情,并等待你完成后,会关闭窗口。

const willCloseListener = windowService.registerWillClose(() => {
console.log('I can do something before close');
return Promise.resolve();
});

willCloseListener.dispose();