问题标签 [ipcrenderer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 为什么我的 ipcMain 没有发送到 Electron 中的 ipcRenderer?
电子新手我已经知道如何从Renderer发送到Main但我正在尝试学习如何从Main到Renderer。在我的研究中,我读到:
IPC 从主进程发送到渲染器并尝试:
主.js:
但我得到一个错误:
未捕获的异常类型错误无法读取未定义的属性“发送”
在阅读“从 IpcMain 向 IpcRenderer - Electron 发送同步消息”之后,我尝试了:
但没有任何反应或错误。我的renderer.js:
为什么我的ipcMain没有发送到我的ipcRenderer?
编辑:
主窗口.js:
我也试过:
主.js:
渲染器.js:
出于某种原因,现在我编写的应用答案 ipcMain 多次发送到渲染器并重复渲染控制台消息
现在应用程序闪烁,但在console.log
它显示一次,我不明白为什么。
编辑
回应答案。
我知道app.getVersion
我只是在使用ENV
用来学习如何发送到主目录。测试代码后,这种方法不起作用。
应对:
引发以下错误:
const 声明中缺少初始化程序
所以修改为:
但是在末尾添加 return 时exports.createWindow
会引发以下错误:
win 未定义
添加let.win
之前exports.createWindow
不会抛出代码,但不会发送任何内容。
电子小提琴
索引.html:
主.js:
渲染器.js:
json - 从 Angular 7 服务传递时,ipcRenderer 参数 JSON 对象如何丢失数据?
我在 Angular 7.1.1 和 Electron 4.1.4 项目中遇到了一个奇怪的问题。
数据流:
- Angular 组件“报表生成器”从经过 FormGroup 和 FormControl 验证的表单收集报表配置选项,并将数据发送到 docx-templater.service
- 用户按钮触发 createReport() 函数
- 当提交完整报告的选项时,createReport() 函数调用 dataService 的 fnGetCompleteControlList() 异步返回正确配置的 JSON。
- 在异步数据检索后使用 .then() 函数,createReport() 函数将作为配置表单一部分的输出目录组合起来,并将两者发送到 docx-templater.service 的 createCompleteDocument() 函数。一旦 promise 返回,它就会更新 UI。
- Angular 服务“docx-templater”的 createCompleteDocument 函数将数据和文件夹值传递给电子“writeCompleteDocument”通道的 ipcRenderer.send 并返回一个承诺。
- 在我的 main.ts 中,我有一个用于“writeCompleteDocument”通道的 ipcMain.on,它将数据传递给 write-docx 函数,以将该数据处理为 word 文档。
问题: 当数据到达我的 write-docx 函数时,它缺少一个对导出过程至关重要的对象子数组。
在将数据发送到 docx-templater.service 之前以及在该服务将其发送到 ipcRenderer 之前(即我的数据服务和报告生成器),我已经验证了电子的 Chrome 开发人员工具控制台中的数据是完美的功能按设计工作)。当我通过将数据保存到 JSON 文件来检查 main.ts 中的数据时,它仅缺少 JSON 的第二个对象中的控件子数组。控件子数组按预期显示在第一个对象中。
我会注意到,从 ipcMain 函数出来的是一个格式正确的 JSON 文件,所以它实际上只是排除了“控件”子数组,并且由于内存或缓冲区限制或类似的东西而没有截断。
我本来希望 ipcRenderer 将 JSON 完全按原样传递给 ipcMain.on 函数,但不知何故它正在修剪部分数据。我什至尝试在将数据发送到渲染器之前对数据进行分类,然后在另一端解析它,但这没有任何作用。
这可能是异步的吗?我不知道下一步该去哪里调试并找出我在此过程中犯的白痴错误。
另外,我意识到上面的数据流对于我正在做的事情来说似乎过于复杂,而且我可能可以更容易地做到这一点,但是对于整个应用程序的结构方式来说它是有意义的(有点),所以我将继续使用它如果我能解决这个错误。
javascript - Electron ipcRenderer.send 的问题
我有一个电子应用程序。它通过 renderer.js 中的 ipcRenderer.send 向 index.js 中的 ipcMain.on 侦听器发送下载事件:
渲染器.js:
index.js:
所以它应该下载(感谢 electron-dl npm 包)project.files 下的所有文件,并将它们保存在 info.location 下。
当 data3.projects 数组下只有一个项目时,它可以工作,文件被下载并存储在“/Users/Marc/GreenPool/”+ project.projectId +“/files/”下。
但是当 data3.projects 数组中有多个值时,它只保存 data3.project 之一的下载文件,而不保存其他文件:
一个有文件:
一个没有:
我们可以在第一张图片上看到其中一个文件是重复的。我认为这表明问题与这样一个事实有关,即在第一个文件夹中写入第一个文件后,它在开始写入第二个文件时仍然认为它在这个文件中(我们可以通过文件 compute2Numbers 看到它( 1).js 是重复的,因为它位于错误的文件夹中)。
控制台的日志是逻辑:
index.js:
渲染器.js:
这似乎是一个异步问题。但我已将查询包装在异步等待函数中,以防止两个下载事件相互重叠。控制台的日志显示:首先下载 data3.projects 数组中第一个值的文件,然后下载 data3.projects 数组中第二个值的文件。
那么如何才能将文件保存在正确的文件夹中呢?
javascript - ipcMain 侦听器未正确注册
在电子应用程序的主进程和渲染器进程之间的 ipc 消息存在一些问题。
ipcRenderer 正确发送消息(我可以从 devtron 看到它)但 ipcMain 没有听任何东西
main.js 中的代码
renderer.jsx 中的代码
json - IPCRenderer.send() 如何将数据序列化为 JSON?
我正在尝试使用 ipcRenderer.send("error", errorObject) 发送有关错误事件的信息,但我的错误对象在侦听器中被序列化为“{}”。现在,我知道 ipcRenderer 在内部将对象序列化为 JSON(更多信息在这里:https ://electronjs.org/docs/api/ipc-renderer )所以我想找出在内部调用什么方法对 JSON 进行序列化以便我可以尝试在我的代码中覆盖它。任何人都可以帮忙吗?
javascript - 如何从 ipcRenderer.on 事件监听器中注销?
在我的主机应用程序中,我有一个按钮,单击该按钮时,会将数据与数据一起发送到我的角度应用程序。像这样:
零件:
在我的角度应用程序中,我收到如下数据:
我注意到的行为是,在我单击按钮 x 次时,我将看到警报 x 次:
- 1 次单击 --> 1 个警报
- 2 单击 --> 2 个警报
- 3单击-> 3个警报..等等
所以这显然向我表明存在内存泄漏。解决方案很简单,在接收到事件后移除事件监听器。
我试过做类似的事情:
但是多个警报仍然发生在单击一次。
我不能使用 ipcRenderer.once 方法,因为我需要监听器保持打开状态,只是没有多个相同的监听器。如何删除 ipcRenderer.on('data-bridge', ...) 事件侦听器,以便每次单击按钮时,我只有一个事件侦听器?
angular - 是否有将电子 6 数据发送到角度 8 组件的功能?
我需要将信息发送到角度组件以进行“自动”登录,我可以使用 IPCRederer(在组件上)和 IPCMain(在“电子”端)将组件数据发送到电子进程,但我不能以从电子到组件的相反方式使用,你能帮我吗?
PS:我想过一个套接字对话,但我认为这不是一个好习惯。
角度:
电子:
angular - Electron-Angular:由于角度组件内未定义的 ipcRenderer 导致运行 Karma 错误
我有一个使用 Angular (8) 作为前端框架的电子应用程序。我正在尝试实施单元测试,但在开始测试时不断收到以下错误:
我的规范文件如下所示:
在 Angular 组件中,我订阅了一个 Electron 事件:
这就是导致测试失败的原因,ipcRenderer 未定义。有谁知道我如何对内部使用 Electrons IPC 的 Angular 组件进行单元测试?
组件中使用的电子服务已添加到规范文件中的提供程序中。