electron——ipcMain模块、ipcRenderer模块
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
Stringlistener
Function
监听 channel
,当接收到新的消息时 listener
会以 listener(event, args...)
的形式被调用。
// 监听message,接收渲染进程发送的消息
ipcMain.on('message', (event, arg) => {
...
})
ipcMain.once(channel, listener)
channel
Stringlistener
Function
添加一次性的 listener
。当且仅当下一个消息发送到 channel
时 listener
才会被调用,随后 <0>listener</0> 会被移除。
// 监听message,接收渲染进程发送的消息
ipcMain.once('message', (event, arg) => {
...
})
ipcMain.removeListener(channel, listener)
channel
Stringlistener
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
Stringlistener
Function
监听 channel, 当新消息到达,将通过 listener(event, args...) 调用 listener。
ipcRenderer.on('refresh-page', (event, arg) => {
...
})
ipcRenderer.once(channel, listener)
channel
Stringlistener
Function
为事件添加一个一次性用的listener 函数.这个 listener 只有在下次的消息到达 channel 时被请求调用,之后就被删除了。
ipcRenderer.once('printerList', (event, arg) => {
...
})
ipcRenderer.removeListener(channel, listener)
channel
Stringlistener
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
Numberchannel
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。
electron——ipcMain模块、ipcRenderer模块的更多相关文章
- Electron入门之ipcMain,ipcRenderer
ipcMain 模块是类EventEmitter的实例.当在主进程中使用它的时候,它控制着由渲染进程(web page)发送过来的异步或同步消息.从渲染进程发送过来的消息将触发事件. [发消息] 发送 ...
- 【Python】[模块]使用模块,安装第三方模块
一个.py文件就称之为一个模块(Model)按目录来组织模块的方法,称为包(Package)每一个包目录下面都会有一个__init__.py的文件内置函数1.使用模块 导入模块 import sys ...
- nodejs模块——fs模块
fs模块用于对系统文件及目录进行读写操作. 一.同步和异步 使用require('fs')载入fs模块,模块中所有方法都有同步和异步两种形式. 异步方法中回调函数的第一个参数总是留给异常参数(exce ...
- Python(文件、文件夹压缩处理模块,shelve持久化模块,xml处理模块、ConfigParser文档配置模块、hashlib加密模块,subprocess系统交互模块 log模块)
OS模块 提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目 ...
- Python的模块,模块的使用、安装,别名,作用域等概念
所谓的模块就是将不同功能的函数分别放到不同的文件中,这样不仅有利于函数的维护,也方便了函数的调用.在Python中,一个.py文件就是一个模块(Module). 在模块的上层有一个叫做包(Packag ...
- python-Day5-深入正则表达式--冒泡排序-时间复杂度 --常用模块学习:自定义模块--random模块:随机验证码--time & datetime模块
正则表达式 语法: mport re #导入模块名 p = re.compile("^[0-9]") #生成要匹配的正则对象 , ^代表从开头匹配,[0 ...
- Thinkphp入门 二 —空操作、空模块、模块分组、前置操作、后置操作、跨模块调用(46)
原文:Thinkphp入门 二 -空操作.空模块.模块分组.前置操作.后置操作.跨模块调用(46) [空操作处理] 看下列图: 实际情况:我们的User控制器没有hello()这个方法 一个对象去访问 ...
- 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时间 ...
- nginx模块,模块的配置使用
nginx模块官方模块(默认支持的)第三方模块 1. --with-http_stub_status_module nginx的客户端状态 配置syntax: sub_status;default:- ...
- Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块
Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fab ...
随机推荐
- Google在情报搜集中的基础技巧
Google在情报搜集中的基础技巧 作者:王宇阳 时间:2019-06-06 作者笔记 Google Hacking 是指使用特定的高级的google搜索语法,收集渗透测试目标的信息,查找目标的配 ...
- 被公司的垃圾XG人事系统吓尿了
OA要尝试设置单点登录,拿现有的HR系统尝试,结果不知道HR系统的加密方式和验证地址,于是乎找HR厂商——厦门XG软件实施人员.结果那个技术人员支支吾吾不肯给我,搞得非常的烦. 真奇怪了,不开源的软件 ...
- Android apk签名方法介绍
还望支持个人博客站:http://www.enjoytoday.cn 参考博客:http://www.enjoytoday.cn/posts/203 为什么要签名 在介绍签名方法之前,首先我们来了解下 ...
- .net core 发布IIS 出现Http 500错误
首先再webconfig中设置stdoutLogEnabled="true",然后运行之后,到logs中查看登陆错误日志. 根据不同的错误进行解决: 我的错误是发布文件夹中缺少Dw ...
- [日常] lscpu查看cpu的详细信息
查看自己电脑的cpu的详细信息 root@tao-PC:/home/tao# lscpu Architecture: x86_64 CPU op-mode(s): -bit, -bit Byte Or ...
- postman---postman参数化
我们在做接口测试的过程中,都会遇到同一个接口不同的数据,每次去一个个填写数据就太麻烦了,今天我们一起学习下如何通过postman进行参数化 参数化 参数化就是1个接口请求不同的数据,我们可以通过把请求 ...
- hibernate之主键生成策略
1. hibernate的主键生成器: generator元素:表示了一个主键生成器,它用来为持久化类实例生成唯一的标识 . 连接数据库的xml hibernate.cfg.xml <?xml ...
- Linux学习(五)远程登录
Linux一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的Linux服务器. 这时我们就需要远程登录到Linux服务器来管理维护系统. Linux系统中是通过ssh服务实现的远程登录功 ...
- MongoDB介绍(一)
MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功 ...
- LG1505 [国家集训队]旅游 树链剖分
问题描述 LG1505 题解 边化点权. 超级多操作的树剖板子... 以后就拿这个当树剖板子复习吧... \(\mathrm{Code}\) #include<bits/stdc++.h> ...