Electron 在主进程内可用的模块

Posted 知否

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Electron 在主进程内可用的模块相关的知识,希望对你有一定的参考价值。

下面是 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 事件
readyElectron 完成初始化时被触发
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在窗口要关闭的时候触发,它在 DOMbeforeunloadunload 事件之前触发,使用 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-loadingtabspinner 开始 spinning 的时候
did-stop-loadingtabspinner 结束 spinning 的时候
did-get-response-details当有关请求资源的详细信息可用的时候发出事件
did-get-redirect-request当指定 frame 中的 文档加载完成的时候发出事件
page-favicon-updatedpage 收到图标 url 的时候发出事件
new-windowpage 请求打开指定 url 窗口的时候发出事件
will-navigate当用户或 page 想要开始导航的时候发出事件
did-navigate当一个导航结束时候发出事件
did-navigate-in-page当页内导航发生的时候发出事件
crashed当渲染进程崩溃的时候发出事件
plugin-crashed当插件进程崩溃时候发出事件
destroyedwebContents 被删除的时候发出事件
devtools-opened当开发者工具栏打开的时候发出事件
devtools-closed当开发者工具栏关闭时候发出事件
devtools-focused当开发者工具栏获得焦点或打开的时候发出事件
certificate-error当验证证书或 url 失败的时候发出事件
select-client-certificate当请求客户端证书的时候发出事件
loginwebContents 想做基本验证的时候发出事件
found-in-page当使用 webContents.findInPage 进行页内查找并且找到可用值得时候发出事件
media-started-playing当媒体开始播放的时候发出事件
media-paused当媒体停止播放的时候发出事件
did-change-theme-colorpage 的主题色时候发出事件,这通常由于引入了一个 meta 标签
cursor-changed当鼠标的类型发生改变的时候发出事件

链接:https://www.9xkd.com/

以上是关于Electron 在主进程内可用的模块的主要内容,如果未能解决你的问题,请参考以下文章

Electron:在主进程中使用模块

Electron 两种进程都可用的模块

electron渲染进程与主进程通信

来自 Electron 渲染器进程的 require() 节点模块,通过 HTTP 提供服务

Electron 键盘快捷键

15.《Electron 跨平台开发实战》- chapter15 发布和更新应用