问题标签 [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 回答
439 浏览

reactjs - 在电子应用程序中使用 contextBridge/preload 时如何更新反应状态

我有一个使用反应的电子应用程序。我在 preload.js 中使用 contextBridge。我想将 app.js 中的变量通过桥传递给主进程中的函数;它将一个值返回到桥并返回到 app.js,它会以某种方式更新状态并触发重新渲染。以下代码正在工作到更新状态。我不明白如何从 preload.js 到 app.js 获取变量?我希望的临时技巧是从预加载中设置 localstorage 并调用 setTimeout 函数来观察特定变量的变化。我知道这是一种不太有趣的方法。代码在这里:

app.js -

preload.js -

main.js -

0 投票
1 回答
189 浏览

api - preload.js 中的 ipcRenderer.on 如何检测 webContents.send?

我是堆栈溢出的全新用户,这是我的第一个问题。

我一直在研究使 Electron 应用程序更安全的方法,并遇到了以下关于 contextBridge 和 preload.js 的讨论。 如果 contextIsolation = true,是否可以使用 ipcRenderer?

我在下面复制了感兴趣的代码。我的问题是关于 Main 进程何时将消息发送回 Renderer 进程。

  1. Main 进程通过 win.webContents.send("fromMain", responseObj); 将消息发送回 Renderer;

  2. 在 Renderer 进程中没有活动的侦听器(没有 ipcRenderer.on,因为它在 preload.js 中)。我们只有 window.api.receive() 但这不是一个监听器本身?

  3. 那么,window.api.receive() 是如何知道何时运行的呢?

编辑/已解决:请参阅下面发布的我自己的答案,谢谢。

main.js

preload.js

渲染器.js

0 投票
0 回答
171 浏览

reactjs - 如何使用单一代码库在浏览器和 PC 中运行 Electron 应用程序

要求- 使用单一代码库在浏览器和 pc 中运行电子应用程序。

面临的问题- 能够在 pc 中作为桌面应用程序运行,但在浏览器中运行 localhost:3000 时(在我的情况下是 Chrome)面临一些与 window.require 相关的问题。在网上尝试了多种解决方案,但目前没有成功。

用例- 使用 ipcMain 和 ipcRenderer 在电子 js 中的 React 应用程序和 main.js 文件之间进行通信,仅适用于 pc 应用程序。(在浏览器中,我需要将其作为没有电子功能(ipcMain 和 ipcRenderer 通信)的简单 Web 应用程序运行,但我需要应用程序在浏览器中运行以及使用单个代码库)

包.json 文件

我的 PC 配置- (macOs Big Sur | 版本 11.4)

浏览器图片 在此处输入图像描述

电子电脑应用 在此处输入图像描述

由于我是电子 js 的新手,请帮助我提供一些有价值的意见。如果有人遇到并解决了这个问题,请指导我正确的方向。

如果问题未解决或需要其他任何内容,请告诉我。

0 投票
0 回答
113 浏览

javascript - 如何从 preload.js 接收数据到 renderer.js

我正在单击一个按钮,该按钮会打开一个对话框以获取文件夹根目录。我目前正在使用调用/句柄。我创建了一个 promise 函数来返回我的数据,但不确定如何将我的数据从 preload.js 移动到 renderer.js

主.js

预加载.js

渲染器.js

CrawlDirectory(文件路径)

0 投票
0 回答
270 浏览

javascript - Electron 应用程序:TypeError fs.existsSync 不是函数

我正在使用 React 和 SQLite3 在 Electron 中构建一个桌面应用程序。我的配置如下:

  • 节点:v14.17.4
  • 电子:13.2.1
  • 反应:17.0.2
  • sqlite3:^5.0.2

我正在尝试启用主端和渲染器端之间的通信,以便通过按下使用 react 构建的按钮在 SQLite3 数据库中插入一行。为此,我正在尝试使用 ipcmain 和 ipcrenderer,但是,如果我使用该指令,const electron = require ("electron");我会收到错误:TypeError: fs.existsSync is not a function.

我正在使用该npm run start命令在开发模式下运行应用程序。

包.json

main.js

0 投票
0 回答
26 浏览

reactjs - 如何解决 fs.existsSync 不是函数?

在尝试在电子之间进行通信并做出反应时,我遇到了上面提到的错误。
在我的App.js文件中:这导致了错误。

我有两个电子文件。启动器(主)和预加载。

我已经尝试了几件事。
我在预加载文件中添加了这个,但仍然出现该错误。

在启动器(主)文件中:

添加错误堆栈:

0 投票
0 回答
24 浏览

javascript - ElectronJS Jquery 和 IPCRenderer / 它不起作用 / 不能一起运行

我正在尝试为工作中的同事制作一个简单的桌面应用程序。我设计了界面,我正在使用 webview。我用 frame: false 命令删除了框架,制作了一个自定义设计框架,并用 ipcrenderer 控制按钮。到目前为止,一切进展顺利。但是,我在我的 index.html 中使用引导程序,我必须使用 jquery。我在这里使用标签分区。

如果我在 webPreferences 中执行 nodeintegration:false,则引导和 jquery 功能,即选项卡部分,可以正常工作。但我使用 ipcrenderer 的按钮不起作用。

相反,如果我将其更改为 nodeintegration: true,我的所有 ipcrenderer 按钮都可以正常工作,但我的选项卡部分,即需要 jquery 的其他菜单,将停止工作。

如何同时运行 ipcrenderer 进程和 jquery 进程。

我这几天一直在处理这个问题,但没有得到解决。

我尝试了各种解决方法,但我无法获得正常工作的结果。我怎么解决这个问题。谢谢您最好的问候。

索引.html

main.js 的一部分

0 投票
1 回答
49 浏览

angular - Electron - 限制从主进程到渲染进程的消息流

我目前在接收从我的主进程到我的渲染器进程(在 Angular 中)的活动窗口的恒定流时遇到一些问题。我知道接收每秒更新会破坏我的应用程序,所以我试图使用 setTimeout 来限制它。但这仍然行不通。我怎样才能解决这个问题?

渲染器 - Angular 中的组件

main.js

到目前为止,我已经尝试了以下方法,但这只会显示一次活动窗口。我想跟踪所有的变化:

渲染器 - Angular 中的组件

main.js

0 投票
1 回答
59 浏览

javascript - Electron FFmpeg 进度处理

我有一个电子应用程序(带有 Angular)。

我是 Electron 和所有这些进程间事件处理的新手。

我的问题是我有这个 ipcMain 处理程序(主进程)(我从 Angular 服务“调用”):

我想要实现的是跟踪视频和音频合并的进度(可能需要几秒钟到几分钟)。但这里的问题是,一旦 Promise 被解决,它就不会发送下一个进度值(我最终会收到 3%,然后即使“合并”仍在进行中,也不会收到任何其他值)。

然后我尝试了以下(主要过程)(我无法编译):

我添加了评论来解释我想要实现的目标。在我的 Angular 服务中,我正在调用这个处理程序,如下所示:

编译时出现以下错误:

我相信还有其他一些“优雅”的方法可以在 Main 和 Renderer 进程之间实现这种行为,如果你能引导我找到任何我将不胜感激的方法。

否则,你能帮我解决这个错误吗?或者与我分享我可以阅读什么来学习如何在 Electron 中使用“Observables”。

0 投票
1 回答
51 浏览

javascript - ipcRenderer 没有收到来自 webContents.send 的消息(电子)

在我的程序的主窗口中,我有一个按钮,如果单击该按钮,则会创建一个新的附加窗口。当这个新窗口完成加载时,我想向ipcRenderer; 但是,到目前为止ipcRenderer,即使窗口创建成功,我也无法接收消息。

以下是 中的代码片段main.js

请注意,这createWindow是一个创建并返回浏览器窗口的函数。

这是代码片段preload.js

如您所见,我希望在received message!新窗口完成加载后在控制台中接收字符串;但是,这并没有发生。我究竟做错了什么?