下面是 Electron
中主进程可用的模块:
模块 | 描述 |
---|---|
app | 负责控制应用程序的整个生命周期 |
autoUpdater | 该模块提供了一个到 Squirrel 自动更新框架的接口 |
BrowserWindow | 可以用于创建一个新的浏览器窗口 |
contentTracing | 用来收集 Chromium 内容模块产生的跟踪信息 |
dialog | 用来显示原生系统对话框,比如打开文件对话框 |
global-Shortcut | 用来注册和注销全局的键盘快捷方式 |
ipcMain | 该模块是 EventEmitter 的一个实例对象,在主进程中使用,可以发送同步或是异步的消息和渲染进程进行交互 |
Menu | 用来创建一个原生的菜单,比如上下文菜单 |
MenuItem | 用来往菜单中添加菜单子项 |
powerMonitor | 用来显示电池电量变化,只能是在主进程中使用,而且只能是在ready事件已经发出的情况下 |
powerSaveBlocker | 用来阻止系统进入省电模式,休眠模式 |
protocol | 用来注册一个定制的协议或是声明使用一个已经存在的协议 |
session | 用来创建新的 Session 对象,保存本地对象等操作 |
webContents | 这是一个 EventEmitter ,负责渲染和控制一个网页,是一个 BrowserWindow 的属性 |
Tray | 一个 Tray 代表着一个操作系统通知区域的一个 icon ,通常情况下是和一个上下文菜单绑定的 |
app模块
app
模块是为了控制整个应用的生命周期设计的。
示例:
例如在最后一个窗口被关闭时退出应用:
const app = require('app');
app.on('window-all-closed', function(){
app.quit();
});
app
对象可以发出以下事件:
事件 | 描述 |
---|---|
will-finish-launching | 当程序完成基本的启动,类似于 ready 事件 |
ready | 当 Electron 完成初始化时被触发 |
window-all-closed | 当所有的窗口都已经关闭的时候触发。仅在当程序将要推退出的时候触发。如果调用了 app.quit() 则不会触发 |
before-quit | 当程序开始关闭窗口的时候发出,调用 event.prevertDefault() 将会阻止应用程序的默认的行为 |
will-quit | 当窗口都已经关闭,程序即将退出的时候发出该事件 |
quit | 当应用程序正在退出时触发 |
autoUpdater模块
autoUpdater
模块提供了一个到 Squirrel
自动更新框架的接口。
autoUpdater
对象会触发以下的事件:
事件 | 描述 |
---|---|
error | 当更新发生错误的时候触发 |
checking-for-update | 当开始检查更新的时候触发 |
update-available | 当发现一个可用更新的时候触发,更新包下载会自动开始 |
update-not-available | 当没有可用更新的时候触发 |
update-downloaded | 在更新下载完成的时候触发 |
BrowserWindow模块
BrowserWindow
模块用于创建一个新的浏览器窗口。
示例:
// 在主进程中
const BrowserWindow = require('electron').BrowserWindow;
// 在渲染进程中
const BrowserWindow = require('electron').remote.BrowserWindow;
var win = new BrowserWindow({ width: 800, height: 400, show: false });
win.on('closed', function() {
win = null;
});
win.loadURL('https://github.com');
win.show();
BrowserWindow
对象可触发下列事件:
事件 | 描述 |
---|---|
close | 在窗口要关闭的时候触发,它在 DOM 的 beforeunload 和 unload 事件之前触发,使用 event.preventDefault() 可以取消这个操作 |
closed | 当窗口已经关闭的时候触发,当你接收到这个事件的时候,你应当删除对已经关闭的窗口的引用对象和避免再次使用它 |
unresponsive | 在界面卡死的时候触发事件 |
responsive | 在界面恢复卡死的时候触发 |
blur | 在窗口失去焦点的时候触发 |
focus | 在窗口获得焦点的时候触发 |
maximize | 在窗口最大化的时候触发 |
unmaximize | 在窗口退出最大化的时候触发 |
minimize | 在窗口最小化的时候触发 |
restore | 在窗口从最小化恢复的时候触发 |
resize | 在窗口 size 改变的时候触发 |
move | 在窗口移动的时候触发,在 OS X 中别名为 moved |
contentTracing模块
contentTracing
模块用来收集底层的 Chromium
内容模块产生的搜索数据,这个模块不具备 web
接口,所以需要我们在 chrome
浏览器中添加 chrome://tracing/
来加载生成文件从而查看结果。
示例:
const contentTracing = require('contentTracing').;
const options = {
categoryFilter: '*',
traceOptions: 'record-until-full,enable-sampling'
}
contentTracing.startRecording(options, function() {
console.log('Tracing started');
setTimeout(function() {
contentTracing.stopRecording('', function(path) {
console.log('Tracing data recorded to ' + path);
});
}, 3000);
});
content-tracing
模块的方法如下:
方法 | 描述 |
---|---|
getCategories | 获得一组分类组,分类组可以更改为新的代码路径 |
startRecording | 开始向所有进程进行记录,一旦收到可以开始记录的请求,记录将会立马启动并且在子进程是异步记录的 |
stopRecording | 停止对所有子进程的记录 |
startMonitoring | 开始向所有进程进行监听 |
stopMonitoring | 停止对所有子进程的监听 |
captureMonitoringSnapshot | 获取当前监听的查找数据 |
getTraceBufferUsag | 通过查找 buffer 进程来获取百分比最大使用量 |
setWatchEvent | 任意时刻在任何进程上指定事件发生时将调用 callback |
cancelWatchEvent | 取消 watch 事件,如果启动查找,这或许会造成 watch 事件的回调函数 出错 |
dialog模块
dialog
模块提供了api
来展示原生的系统对话框,例如打开文件框或 alert
框。所以 web
应用可以给用户带来跟系统应用相同的体验。
示例:
对话框例子,展示了选择文件和目录:
var win = ...; // 显示对话框的浏览器窗口
const dialog = require('electron').dialog;
console.log(dialog.showOpenDialog({ properties: [ 'openFile', 'openDirectory', 'multiSelections' ]}));
global-shortcut模块
global-shortcut
模块用于设置各种自定义操作的快捷键。注意使用此模块注册的快捷键是系统全局的,不要在应用模块响应 ready
消息前使用此模块。
示例:
var app = require('app');
var globalShortcut = require('electron').globalShortcut;
app.on('ready', function() {
// 注册一个'ctrl+x'快捷方式
var ret = globalShortcut.register('ctrl+x', function() {
console.log('ctrl+x is pressed');
})
if (!ret) {
console.log('registration failed');
}
// 检查是否注册了'ctrl+x'快捷方式
console.log(globalShortcut.isRegistered('ctrl+x'));
});
app.on('will-quit', function() {
// 注销'ctrl+x'快捷方式
globalShortcut.unregister('ctrl+x');
// 注销所有快捷方式
globalShortcut.unregisterAll();
});
ipcMain模块
ipcMain
模块是类 EventEmitter
的实例,当在主进程中使用它的时候,它控制着由渲染进程发送过来的异步或同步消息,从渲染进程发送过来的消息将触发事件。
示例:
下面是一个在主进程和渲染进程之间发送和处理消息的实例。
主进程:
const ipcMain = require('electron').ipcMain;
ipcMain.on('asynchronous-message', function(event, arg) {
console.log(arg); // 输出ping
event.sender.send('asynchronous-reply', 'pong');
});
ipcMain.on('synchronous-message', function(event, arg) {
console.log(arg); // 输出ping
event.returnValue = 'pong';
});
渲染进程:
const ipcRenderer = require('electron').ipcRenderer;
console.log(ipcRenderer.sendSync('synchronous-message', 'ping')); // 输出pong
ipcRenderer.on('asynchronous-reply', function(event, arg) {
console.log(arg); // 输出pong
});
ipcRenderer.send('asynchronous-message', 'ping');
menu模块
menu
模块可以用来创建原生菜单,它可用作应用菜单和内容菜单。
示例:
创建一个新菜单的语法:
var menu = new Menu();
MenuItem模块
MenuItem
模块用来往菜单中添加菜单子项。
示例:
创建一个新的 MenuItem
的语法:
var menuItem = new MenuItem(options)
options
的选项如下所示:
click
role
type
label
sublabel
accelerator
icon
enabled
visible
checked
submenu
id
position
powerMonitor模块
powerMonitor
模块是用来监听能源区改变的,只能在主进程中使用。在 app
模块的 ready
事件触发之后就不能使用这个模块了。
示例:
app.on('ready', function() {
require('electron').powerMonitor.on('suspend', function() {
console.log('系统将进入休眠状态');
});
});
powerMonitor
对象会触发以下的事件:
事件 | 描述 |
---|---|
suspend | 在系统挂起的时候触发 |
resume | 在系统恢复继续工作的时候触发 |
on-ac | 在系统使用交流电的时候触发 |
on-battery | 在系统使用电池电源的时候触发 |
powerSaveBlocker模块
powerSaveBlocker
模块是用来阻止应用系统进入睡眠模式的,因此这允许应用保持系统和屏幕继续工作。
示例:
const powerSaveBlocker = require('electron').powerSaveBlocker;
var id = powerSaveBlocker.start('prevent-display-sleep');
console.log(powerSaveBlocker.isStarted(id));
powerSaveBlocker.stop(id);
powerMonitor
模块有如下方法:
方法 | 描述 |
---|---|
start | 开始阻止系统进入睡眠模式 |
stop | 让指定 blocker 停止活跃 |
isStarted | 返回 boolean , 是否对应的 powerSaveBlocker 已经启动 |
protocol模块
protocol
模块可以注册一个自定义协议,或者使用一个已经存在的协议。这个模块只有在 app
模块的 ready
事件触发之后才可使用。
示例:
使用一个与 file://
功能相似的协议 :
const electron = require('electron');
const app = electron.app;
const path = require('path');
app.on('ready', function() {
var protocol = electron.protocol;
protocol.registerFileProtocol('atom', function(request, callback) {
var url = request.url.substr(7);
callback({path: path.normalize(__dirname + '/' + url)});
}, function (error) {
if (error)
console.error('注册协议失败')
});
});
session模块
session
模块可以用来创建一个新的 Session
对象。
示例:
const BrowserWindow = require('electron').BrowserWindow;
var win = new BrowserWindow({ width: 800, height: 600 });
win.loadURL("http://github.com");
var ses = win.webContents.session;
webContents模块
webContents
是一个 EventEmitter
,负责渲染和控制一个网页,是一个 BrowserWindow
对象的属性。
示例:
const BrowserWindow = require('electron').BrowserWindow;
var win = new BrowserWindow({width: 800, height: 1500});
win.loadURL("https://www.9xkd.com/");
var webContents = win.webContents;
webContents
对象可发出下列事件:
事件 | 描述 |
---|---|
did-finish-load | 当导航完成时发出事件,onload 事件也完成 |
did-fail-load | 这个事件类似 did-finish-load ,但是是在加载失败或取消加载时发出 |
did-frame-finish-load | 当一个 frame 导航完成的时候发出事件 |
did-start-loading | 当 tab 的 spinner 开始 spinning 的时候 |
did-stop-loading | 当 tab 的 spinner 结束 spinning 的时候 |
did-get-response-details | 当有关请求资源的详细信息可用的时候发出事件 |
did-get-redirect-request | 当指定 frame 中的 文档加载完成的时候发出事件 |
page-favicon-updated | 当 page 收到图标 url 的时候发出事件 |
new-window | 当 page 请求打开指定 url 窗口的时候发出事件 |
will-navigate | 当用户或 page 想要开始导航的时候发出事件 |
did-navigate | 当一个导航结束时候发出事件 |
did-navigate-in-page | 当页内导航发生的时候发出事件 |
crashed | 当渲染进程崩溃的时候发出事件 |
plugin-crashed | 当插件进程崩溃时候发出事件 |
destroyed | 当 webContents 被删除的时候发出事件 |
devtools-opened | 当开发者工具栏打开的时候发出事件 |
devtools-closed | 当开发者工具栏关闭时候发出事件 |
devtools-focused | 当开发者工具栏获得焦点或打开的时候发出事件 |
certificate-error | 当验证证书或 url 失败的时候发出事件 |
select-client-certificate | 当请求客户端证书的时候发出事件 |
login | 当 webContents 想做基本验证的时候发出事件 |
found-in-page | 当使用 webContents.findInPage 进行页内查找并且找到可用值得时候发出事件 |
media-started-playing | 当媒体开始播放的时候发出事件 |
media-paused | 当媒体停止播放的时候发出事件 |
did-change-theme-color | 当 page 的主题色时候发出事件,这通常由于引入了一个 meta 标签 |
cursor-changed | 当鼠标的类型发生改变的时候发出事件 |