问题标签 [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.

0 投票
2 回答
16067 浏览

javascript - 为什么我的 ipcMain 没有发送到 Electron 中的 ipcRenderer?

电子新手我已经知道如何从Renderer发送到Main但我正在尝试学习如何从MainRenderer。在我的研究中,我读到:

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:

0 投票
2 回答
549 浏览

json - 从 Angular 7 服务传递时,ipcRenderer 参数 JSON 对象如何丢失数据?

我在 Angular 7.1.1 和 Electron 4.1.4 项目中遇到了一个奇怪的问题。

数据流:

  1. Angular 组件“报表生成器”从经过 FormGroup 和 FormControl 验证的表单收集报表配置选项,并将数据发送到 docx-templater.service
    • 用户按钮触发 createReport() 函数
    • 当提交完整报告的选项时,createReport() 函数调用 dataService 的 fnGetCompleteControlList() 异步返回正确配置的 JSON。
    • 在异步数据检索后使用 .then() 函数,createReport() 函数将作为配置表单一部分的输出目录组合起来,并将两者发送到 docx-templater.service 的 createCompleteDocument() 函数。一旦 promise 返回,它就会更新 UI。
  2. Angular 服务“docx-templater”的 createCompleteDocument 函数将数据和文件夹值传递给电子“writeCompleteDocument”通道的 ipcRenderer.send 并返回一个承诺。
  3. 在我的 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 函数,但不知何故它正在修剪部分数据。我什至尝试在将数据发送到渲染器之前对数据进行分类,然后在另一端解析它,但这没有任何作用。

这可能是异步的吗?我不知道下一步该去哪里调试并找出我在此过程中犯的白痴错误。

另外,我意识到上面的数据流对于我正在做的事情来说似乎过于复杂,而且我可能可以更容易地做到这一点,但是对于整个应用程序的结构方式来说它是有意义的(有点),所以我将继续使用它如果我能解决这个错误。

0 投票
0 回答
467 浏览

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 数组中第二个值的文件。

那么如何才能将文件保存在正确的文件夹中呢?

0 投票
1 回答
468 浏览

javascript - ipcMain 侦听器未正确注册

在电子应用程序的主进程和渲染器进程之间的 ipc 消息存在一些问题。

ipcRenderer 正确发送消息(我可以从 devtron 看到它)但 ipcMain 没有听任何东西

main.js 中的代码

renderer.jsx 中的代码

0 投票
1 回答
847 浏览

json - IPCRenderer.send() 如何将数据序列化为 JSON?

我正在尝试使用 ipcRenderer.send("error", errorObject) 发送有关错误事件的信息,但我的错误对象在侦听器中被序列化为“{}”。现在,我知道 ipcRenderer 在内部将对象序列化为 JSON(更多信息在这里:https ://electronjs.org/docs/api/ipc-renderer )所以我想找出在内部调用什么方法对 JSON 进行序列化以便我可以尝试在我的代码中覆盖它。任何人都可以帮忙吗?

0 投票
0 回答
105 浏览

javascript - ipcRenderer.send() 函数在 setInterval 内不起作用

我需要解释和解决为什么以下代码在我的 Electron 代码中不起作用。

我想要做的只是ipcRenderer.send()每秒使用该方法发布一个事件,但是我收到Uncaught Exception如下所示的错误。

Cannot read property send of undefined at Timeout_onTimeout

在此处输入图像描述

0 投票
0 回答
387 浏览

javascript - 为什么我无法将 JSON 数据发送到 ipcRenderer

在我的main.js app.on("ready")中,我调用了一个名为的函数runTimer(),其中包含以下内容:

当我在以下行中进行控制台登录时,我能够在控制台中看到我希望发送到 UI 的数据:

所以我希望以下行将相同的 JSON 数据发送到 UI。

但是,我在 UI 中得到了一个 unit8Array 结果,我不确定为什么它不显示在控制台后面的一行中记录的 JSON 结果。

IPC 渲染器

基本上,我没有在 UI 控制台中记录 JSON 数据,而是得到 unit8Array,如下所示:

在此处输入图像描述

0 投票
1 回答
6750 浏览

javascript - 如何从 ipcRenderer.on 事件监听器中注销?

在我的主机应用程序中,我有一个按钮,单击该按钮时,会将数据与数据一起发送到我的角度应用程序。像这样:

零件:

在我的角度应用程序中,我收到如下数据:

我注意到的行为是,在我单击按钮 x 次时,我将看到警报 x 次:

  • 1 次单击 --> 1 个警报
  • 2 单击 --> 2 个警报
  • 3单击-> 3个警报..等等

所以这显然向我表明存在内存泄漏。解决方案很简单,在接收到事件后移除事件监听器。

我试过做类似的事情:

但是多个警报仍然发生在单击一次。

我不能使用 ipcRenderer.once 方法,因为我需要监听器保持打开状态,只是没有多个相同的监听器。如何删除 ipcRenderer.on('data-bridge', ...) 事件侦听器,以便每次单击按钮时,我只有一个事件侦听器?

0 投票
2 回答
1190 浏览

angular - 是否有将电子 6 数据发送到角度 8 组件的功能?

我需要将信息发送到角度组件以进行“自动”登录,我可以使用 IPCRederer(在组件上)和 IPCMain(在“电子”端)将组件数据发送到电子进程,但我不能以从电子到组件的相反方式使用,你能帮我吗?

PS:我想过一个套接字对话,但我认为这不是一个好习惯。

角度:

电子:

0 投票
1 回答
271 浏览

angular - Electron-Angular:由于角度组件内未定义的 ipcRenderer 导致运行 Karma 错误

我有一个使用 Angular (8) 作为前端框架的电子应用程序。我正在尝试实施单元测试,但在开始测试时不断收到以下错误:

我的规范文件如下所示:

在 Angular 组件中,我订阅了一个 Electron 事件:

这就是导致测试失败的原因,ipcRenderer 未定义。有谁知道我如何对内部使用 Electrons IPC 的 Angular 组件进行单元测试?

组件中使用的电子服务已添加到规范文件中的提供程序中。