ipcMain 模块是类EventEmitter的实例.当在主进程中使用它的时候,它控制着由渲染进程(web page)发送过来的异步或同步消息.从渲染进程发送过来的消息将触发事件.

【发消息】

  • 发送消息,事件名为 channel.
  • 回应同步消息, 你可以设置 event.returnValue.
  • 回应异步消息, 你可以使用 event.sender.send(...).

例子:

// 主进程中
const ipcMain = require('electron').ipcMain;
ipcMain.on('asynchronous-message', function(event, arg) {
console.log(arg); // prints "ping"
event.sender.send('asynchronous-reply', 'pong');
}); ipcMain.on('synchronous-message', function(event, arg) {
console.log(arg); // prints "ping"
event.returnValue = 'pong';
});
// 渲染进程中(web page).
const ipcRenderer = require('electron').ipcRenderer;
console.log(ipcRenderer.sendSync('synchronous-message', 'ping')); // prints "pong" ipcRenderer.on('asynchronous-reply', function(event, arg) {
console.log(arg); // prints "pong"
});
ipcRenderer.send('asynchronous-message', 'ping');

从上面的代码中,我们可以看出,同步消息使用sendSync方法,在发出的瞬间即可接收到响应内容。而异步消息使用send方法,之后需要监听异步事件才能得到响应。

【监听消息】

ipcMain.on(channel, listener)

  • channel String
  • listener Function

监听 channel, 当新消息到达,将通过 listener(event, args...) 调用 listener.

ipcMain.once(channel, listener)

  • channel String
  • listener Function

为事件添加一个一次性用的listener 函数.这个 listener 只有在下次的消息到达 channel 时被请求调用,之后就被删除了.

ipcMain.removeListener(channel, listener)

  • channel String
  • listener Function

为特定的 channel 从监听队列中删除特定的 listener 监听者.

ipcMain.removeAllListeners([channel])

  • channel String (可选)

删除所有监听者,或特指的 channel 的所有监听者.

【事件对象】

event.returnValue

将此设置为在一个同步消息中返回的值.

event.sender

返回发送消息的 webContents ,你可以调用 event.sender.send 来回复异步消息。

ipcRenderer 模块是一个EventEmitter类的实例. 它提供了有限的方法,你可以从渲染进程向主进程发送同步或异步消息. 也可以收到主进程的相应.

【消息监听】

ipcRenderer.on(channel, listener)

  • channel String
  • listener Function

监听 channel, 当有新消息到达,使用 listener(event, args...) 调用 listener .

ipcRenderer.once(channel, listener)

  • channel String
  • listener Function

为这个事件添加一个一次性 listener 函数.这个 listener 将在下一次有新消息被发送到 channel 的时候被请求调用,之后就被删除了.

ipcRenderer.removeListener(channel, listener)

  • channel String
  • listener Function

从指定的 channel 中的监听者数组删除指定的 listener .

ipcRenderer.removeAllListeners([channel])

  • channel String (optional)

删除所有的监听者,或者删除指定 channel 中的全部.

【发送消息】

ipcRenderer.send(channel[, arg1][, arg2][, ...])

  • channel String
  • arg (可选)

通过 channel 向主进程发送异步消息,也可以发送任意参数.参数会被JSON序列化之后就不会包含函数或原型链.

主进程通过使用 ipcMain 模块来监听 channel,从而处理消息.通过 event.sender.send() 来响应.

ipcRenderer.sendSync(channel[, arg1][, arg2][, ...])

  • channel String
  • arg (可选)

通过 channel 向主进程发送同步消息,也可以发送任意参数.参数会被JSON序列化,之后就不会包含函数或原型链.

主进程通过使用 ipcMain 模块来监听 channel,从而处理消息, 通过 event.returnValue 来响应.

注意: 发送同步消息将会阻塞整个渲染进程,除非你知道你在做什么,否则就永远不要用它 .

ipcRenderer.sendToHost(channel[, arg1][, arg2][, ...])

  • channel String
  • arg (可选)

类似 ipcRenderer.send ,但是它的事件将发往 host page 的 <webview> 元素,而不是主进程.

Electron入门之ipcMain,ipcRenderer的更多相关文章

  1. electron 入门小白贴

    electron 入门小白贴 electron demo 跑起来! 毕设准备是做个 跨平台的做题的客户端,打算用 electron 来弄. 然而今天折腾了半天才终于吧demo给跑起来了.经历了许多的问 ...

  2. Electron 入门第一篇

    官网:http://electronjs.org/docs/tutorial/application-architecture 转载:https://blog.csdn.net/qq_33323731 ...

  3. Electron入门Demo之桌面应用计算器笔记(二)

    码文不易啊,转载请带上本文链接呀,感谢感谢 https://www.cnblogs.com/echoyya/p/14307996.html 在之前总结了一篇自学笔记,通过之前学习到的方法和知识,完成了 ...

  4. Electron入门应用打包exe(windows)

    最近在学习nodejs,得知Electron是通过将Chromium和Node.js合并到同一个运行时环境中,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一门技术.对于之前一直从 ...

  5. electron入门教程

    1.atom/electron github: https://github.com/atom/electron 中文文档: https://github.com/atom/electron/tree ...

  6. 1、Electron入门HelloWorld案例

    一.Electron是什么? 官网:https://electronjs.org/ Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库. ...

  7. electron入门代码

    Electron 提供了一个实时构建桌面应用的纯 JavaScript 环境.Electron 可以获取到你定义在 package.json 中 main 文件内容,然后执行它.通过这个文件(通常我们 ...

  8. electron入门心得

    前言 前端开发桌面程序这个概念已经出现有一段时间了,这项技术也已经走向成熟,Github上nw和光electron的star就差不多有10w颗星了,github也衍生出了很多开源的桌面项目俨然成了一个 ...

  9. electron入门笔记(三)- 引入bootstrap

    源码:https://github.com/sueRimn/electron-bootstrap 当引入jQuery和bootstrap文件时,会报错,原因是:electron 的 Renderer ...

随机推荐

  1. Linux服务器上搭建web项目环境

    一.下载并安装jdk 去官网下载linux系统上jdk的安装包jdk-8u181-linux-x64.tar.gz,在Linux的/usr目录下新建文件夹java,可以使用命令:cd /usr    ...

  2. PHP----------安装包lnmp1.3-full安装的lnmp环境,如何安装PHP扩展

    1. 如果已经安装LNMP套件,请按以下步骤处理 a. 跳转到fileinfo源代码目录` cd /root/downloads/lnmp1.2-full/src/php-7.0.7/ext/file ...

  3. phpcms列表页替换

    根据栏目代号获取栏目图 <img src="{$CATEGORYS[$top_parentid][image]}" width="1200" height ...

  4. kendo treeview checkbox初始化选中问题,没解决,暂时记录下

    想做带有checkbox的tree,由于项目一直用kendo ui for mvc,感觉 牛逼的kendo肯定有tree.结果碰到了选中的问题. 无法根据后台传来的IsChecked字段来设置  tr ...

  5. TheFatRat一般使用

    利用它生成后门 第一种通常情况下速度很快,较稳定,但免杀效果极差 推荐使用第二种 免杀效果好,如下图 第一种是最新的模块,较免杀效果极好.还可伪造图标 第二种是旧的

  6. 使用日期插件用js处理日期格式

    function compareDate(checkStartDate, checkEndDate) {    var arys1= new Array();    var arys2= new Ar ...

  7. undefined 和null的区别

    undefined 和null的区别null是一个表示"无"的对象,转为数值时为0:undefined是一个表示"无"的原始值,转为数值时为NaN.undefi ...

  8. 谷歌浏览器怎样把网页全部内容保存为.mhtml文件?

    Chrome保存.mhtml网页文件的方法: 在 Chrome 地址栏中键入chrome://flags,回车, 在页面搜索栏输入mhtml 把“Save Page as MHTML”项修改为 Ena ...

  9. Linux 基础内容

    1.linux版本有:redhat(收费),centos,ubuntu,suse(开发使用) 2./目录下的:etc配置文件目录,media挂载点,opt第三方安装目录,boot启动文件,home家, ...

  10. Jira和Confluence备份恢复

    jira和confluence备份 备份脚本: #! /bin/bash echo "########################################"   TIM ...