ipcMain

主进程渲染进程 的异步通信。

ipcMain模块是EventEmitter类的一个实例。 当在主进程中使用时,它处理从渲染器进程(网页)发送出来的异步和同步信息。 从渲染器进程发送的消息将被发送到该模块。

举个例子

// 在主进程中.
const { ipcMain } = require('electron')
// 监听asynchronous-message,接收渲染进程发送的消息
ipcMain.on('asynchronous-message', (event, arg) => {
console.log(arg) // prints "ping"
// 回复消息
event.reply('asynchronous-reply', 'pong')
}) // 监听synchronous-message,接收渲染进程发送的消息
ipcMain.on('synchronous-message', (event, arg) => {
console.log(arg) // prints "ping"
// 返回的值
event.returnValue = 'pong'
})
//在渲染器进程 (网页) 中。
const { ipcRenderer } = require('electron')
// 向主进程synchronous-message发送消息,并接收返回结果
console.log(ipcRenderer.sendSync('synchronous-message', 'ping')) // prints "pong" // 接收asynchronous-reply返回的消息
ipcRenderer.on('asynchronous-reply', (event, arg) => {
console.log(arg) // prints "pong"
})
// 向asynchronous-message发送消息
ipcRenderer.send('asynchronous-message', 'ping')

方法

ipcMain.on(channel, listener)

  • channel String
  • listener Function

监听 channel,当接收到新的消息时 listener 会以 listener(event, args...) 的形式被调用。

// 监听message,接收渲染进程发送的消息
ipcMain.on('message', (event, arg) => {
...
})

ipcMain.once(channel, listener)

  • channel String
  • listener Function

添加一次性的 listener。当且仅当下一个消息发送到 channellistener 才会被调用,随后 <0>listener</0> 会被移除。

// 监听message,接收渲染进程发送的消息
ipcMain.once('message', (event, arg) => {
...
})

ipcMain.removeListener(channel, listener)

  • channel String
  • listener Function

从监听器数组中移除监听 channel 的指定 listener

ipcMain.removeAllListeners([channel])

  • channel String

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

事件对象

传递给 callback 的 event 对象有如下方法:

event.frameId

一个整数,表示发送此消息的呈现程序帧的ID。

event.returnValue

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

event.sender

返回发送消息的web内容,您可以调用event.sender。发送以回复异步消息 webContents.send

event.reply

一个函数,它将向发送您当前正在处理的原始消息的呈现程序frane发送IPC消息。您应该使用此方法对发送的消息进行“回复”,以确保回复将进入正确的流程和框架。

ipcRenderer

渲染器进程主进程 的异步通信。

ipcRenderer 是一个 EventEmitter 的实例。 你可以使用它提供的一些方法从渲染进程 (web 页面) 发送同步或异步的消息到主进程。 也可以接收主进程回复的消息。

方法

ipcRenderer.on(channel, listener)

  • channel String
  • listener Function

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

ipcRenderer.on('refresh-page', (event, arg) => {
...
})

ipcRenderer.once(channel, listener)

  • channel String
  • listener Function

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

ipcRenderer.once('printerList', (event, arg) => {
...
})

ipcRenderer.removeListener(channel, listener)

  • channel String
  • listener Function

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

ipcRenderer.removeAllListeners(channel)

  • channel String

移除所有的监听器,当指定 channel 时只移除与其相关的所有监听器。

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

  • channel String
  • ...args any[]

通过 channel 发送异步消息到主进程,可以携带任意参数。 在内部,参数会被序列化为 JSON,因此参数对象上的函数和原型链不会被发送。

主进程可以使用 ipcMain 监听channel 来接收这些消息。

ipcRenderer.send("printerList");

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

  • channel String
  • ...args any[]

返回 any - 由 ipcMain 处理程序发送过来的值。

通过 channel 发送同步消息到主进程,可以携带任意参数。 在内部,参数会被序列化为 JSON,因此参数对象上的函数和原型链不会被发送。

主进程可以使用 ipcMain 监听channel来接收这些消息,并通过 event.returnValue 设置回复消息。

注意: 发送同步消息将会阻塞整个渲染进程,你应该避免使用这种方式 - 除非你知道你在做什么。

ipcRenderer.sendSync("printerList");

ipcRenderer.sendTo(webContentsId, channel, [, arg1][, arg2][, ...])

  • webContentsId Number
  • channel String
  • ...args any[]

通过通道向带有webContentsId的窗口发送消息。

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

  • channel String
  • ...args any[]

就像 ipcRenderer.send,不同的是消息会被发送到 host 页面上的 <webview> 元素,而不是主进程。

事件对象

event.senderId

返回webcontent。发送消息的id,您可以调用event.sender. sendto (event)。要回复此消息,请参见ipcRenderer。发送到以获取更多信息。这只适用于从不同呈现程序发送的消息。直接从主进程集事件发送的消息。senderId为0。

ipcMain

ipcRenderer

electron——ipcMain模块、ipcRenderer模块的更多相关文章

  1. Electron入门之ipcMain,ipcRenderer

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

  2. 【Python】[模块]使用模块,安装第三方模块

    一个.py文件就称之为一个模块(Model)按目录来组织模块的方法,称为包(Package)每一个包目录下面都会有一个__init__.py的文件内置函数1.使用模块 导入模块 import sys ...

  3. nodejs模块——fs模块

    fs模块用于对系统文件及目录进行读写操作. 一.同步和异步 使用require('fs')载入fs模块,模块中所有方法都有同步和异步两种形式. 异步方法中回调函数的第一个参数总是留给异常参数(exce ...

  4. Python(文件、文件夹压缩处理模块,shelve持久化模块,xml处理模块、ConfigParser文档配置模块、hashlib加密模块,subprocess系统交互模块 log模块)

    OS模块 提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname")  改变当前脚本工作目 ...

  5. Python的模块,模块的使用、安装,别名,作用域等概念

    所谓的模块就是将不同功能的函数分别放到不同的文件中,这样不仅有利于函数的维护,也方便了函数的调用.在Python中,一个.py文件就是一个模块(Module). 在模块的上层有一个叫做包(Packag ...

  6. python-Day5-深入正则表达式--冒泡排序-时间复杂度 --常用模块学习:自定义模块--random模块:随机验证码--time & datetime模块

    正则表达式   语法:             mport re #导入模块名 p = re.compile("^[0-9]") #生成要匹配的正则对象 , ^代表从开头匹配,[0 ...

  7. Thinkphp入门 二 —空操作、空模块、模块分组、前置操作、后置操作、跨模块调用(46)

    原文:Thinkphp入门 二 -空操作.空模块.模块分组.前置操作.后置操作.跨模块调用(46) [空操作处理] 看下列图: 实际情况:我们的User控制器没有hello()这个方法 一个对象去访问 ...

  8. s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译

    时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...

  9. nginx模块,模块的配置使用

    nginx模块官方模块(默认支持的)第三方模块 1. --with-http_stub_status_module nginx的客户端状态 配置syntax: sub_status;default:- ...

  10. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

随机推荐

  1. nRF24L01+如何检测信道被占用-RSSI寄存器实战分享

    检测信道占用的需求场景 在使用nRF24L01模块做一对多或多对一的组网通信中,大家都会担心一个问题就是在发送的时候,希望不要有其他的模块也进行发送,因为这样就会使无线信号发生碰撞,信道被堵塞,造成通 ...

  2. [Go] golang实时监控日志文件的包tail

    在linux中有一个tail命令,tail -f可以实时的监控文件新增加的内容,如果用代码实现这个逻辑,可以下载使用这个包go get github.com/hpcloud/tail/... 测试代码 ...

  3. C++ 基础语法 快速复习笔记(3)---重载函数,多态,虚函数

    1.重载运算符和重载函数: C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载. 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它 ...

  4. public class和class的区别

    class A { } class B { } public class 和class的区别: * 一个java源文件当中看看定义多个class *一个java源文件当中public的class不是必 ...

  5. Html学习之四(页面布局)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. Pwn-Smashes

    题目地址 https://dn.jarvisoj.com/challengefiles/smashes.44838f6edd4408a53feb2e2bbfe5b229 友链 https://www. ...

  7. JVM的内存结构以及性能调优

    JVM的内存结构以及性能调优 发布时间: 2017-11-22 阅读数: 16675 JVM的内存结构以及性能调优1:JVM的结构主要包括三部分,堆,栈,非堆内存(方法区,驻留字符串)堆上面存储的是引 ...

  8. javaScript___计算时间前一天和后一天案例

    1.  HTML 排版 <button onclick="anteayer()">前天</button> <button onclick=" ...

  9. Linux学习笔记-第10天 特殊的交换分区

    关键词,分区.mkswap swapon .uquota,RAID,/etc/fstab 此章开始,难度有些提升.不过还好自己有点基础.

  10. jdbc工具类是多例的

    一直以为他 是单例的, 以为创建个工具类就是为了单例, 节省效率 , 其实 是为了封装代码, 简洁 ! 还有重要一点  :  所欲工具类里面不要抛异常 要捕捉异常  !