下面是 Electron
中主进程可用的模块:git
模块 | 描述 |
---|---|
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
模块是为了控制整个应用的生命周期设计的。github
例如在最后一个窗口被关闭时退出应用:web
const app = require('app'); app.on('window-all-closed', function(){ app.quit(); });
app
对象能够发出如下事件:chrome
事件 | 描述 |
---|---|
will-finish-launching | 当程序完成基本的启动,相似于 ready 事件 |
ready | 当 Electron 完成初始化时被触发 |
window-all-closed | 当全部的窗口都已经关闭的时候触发。仅在当程序将要推退出的时候触发。若是调用了 app.quit() 则不会触发 |
before-quit | 当程序开始关闭窗口的时候发出,调用 event.prevertDefault() 将会阻止应用程序的默认的行为 |
will-quit | 当窗口都已经关闭,程序即将退出的时候发出该事件 |
quit | 当应用程序正在退出时触发 |
autoUpdater
模块提供了一个到 Squirrel
自动更新框架的接口。api
autoUpdater
对象会触发如下的事件:浏览器
事件 | 描述 |
---|---|
error | 当更新发生错误的时候触发 |
checking-for-update | 当开始检查更新的时候触发 |
update-available | 当发现一个可用更新的时候触发,更新包下载会自动开始 |
update-not-available | 当没有可用更新的时候触发 |
update-downloaded | 在更新下载完成的时候触发 |
BrowserWindow
模块用于建立一个新的浏览器窗口。session
// 在主进程中 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
对象可触发下列事件:app
事件 | 描述 |
---|---|
close | 在窗口要关闭的时候触发,它在 DOM 的 beforeunload 和 unload 事件以前触发,使用 event.preventDefault() 能够取消这个操做 |
closed | 当窗口已经关闭的时候触发,当你接收到这个事件的时候,你应当删除对已经关闭的窗口的引用对象和避免再次使用它 |
unresponsive | 在界面卡死的时候触发事件 |
responsive | 在界面恢复卡死的时候触发 |
blur | 在窗口失去焦点的时候触发 |
focus | 在窗口得到焦点的时候触发 |
maximize | 在窗口最大化的时候触发 |
unmaximize | 在窗口退出最大化的时候触发 |
minimize | 在窗口最小化的时候触发 |
restore | 在窗口从最小化恢复的时候触发 |
resize | 在窗口 size 改变的时候触发 |
move | 在窗口移动的时候触发,在 OS X 中别名为 moved |
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
模块提供了api
来展现原生的系统对话框,例如打开文件框或 alert
框。因此 web
应用能够给用户带来跟系统应用相同的体验。
对话框例子,展现了选择文件和目录:
var win = ...; // 显示对话框的浏览器窗口 const dialog = require('electron').dialog; console.log(dialog.showOpenDialog({ properties: [ 'openFile', 'openDirectory', 'multiSelections' ]}));
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
模块是类 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
模块能够用来建立原生菜单,它可用做应用菜单和内容菜单。
建立一个新菜单的语法:
var menu = new Menu();
MenuItem
模块用来往菜单中添加菜单子项。
建立一个新的 MenuItem
的语法:
var menuItem = new MenuItem(options)
options
的选项以下所示:
click
role
type
label
sublabel
accelerator
icon
enabled
visible
checked
submenu
id
position
powerMonitor
模块是用来监听能源区改变的,只能在主进程中使用。在 app
模块的 ready
事件触发以后就不能使用这个模块了。
app.on('ready', function() { require('electron').powerMonitor.on('suspend', function() { console.log('系统将进入休眠状态'); }); });
powerMonitor
对象会触发如下的事件:
事件 | 描述 |
---|---|
suspend | 在系统挂起的时候触发 |
resume | 在系统恢复继续工做的时候触发 |
on-ac | 在系统使用交流电的时候触发 |
on-battery | 在系统使用电池电源的时候触发 |
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
模块能够注册一个自定义协议,或者使用一个已经存在的协议。这个模块只有在 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
对象。
const BrowserWindow = require('electron').BrowserWindow; var win = new BrowserWindow({ width: 800, height: 600 }); win.loadURL("http://github.com"); var ses = win.webContents.session;
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 | 当鼠标的类型发生改变的时候发出事件 |