问题标签 [ipcmain]
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.
reactjs - 在电子应用程序中使用 contextBridge/preload 时如何更新反应状态
我有一个使用反应的电子应用程序。我在 preload.js 中使用 contextBridge。我想将 app.js 中的变量通过桥传递给主进程中的函数;它将一个值返回到桥并返回到 app.js,它会以某种方式更新状态并触发重新渲染。以下代码正在工作到更新状态。我不明白如何从 preload.js 到 app.js 获取变量?我希望的临时技巧是从预加载中设置 localstorage 并调用 setTimeout 函数来观察特定变量的变化。我知道这是一种不太有趣的方法。代码在这里:
app.js -
preload.js -
main.js -
javascript - 未捕获的 ReferenceError:使用示例文档在 ElectronJS 中未定义要求
简短介绍
我一直在关注有关从渲染和主进程进行通信的官方 Electron 文档(https://www.electronjs.org/docs/api/ipc-main)
,但我无法让它工作。
错误
在尝试发送消息示例时,我在 JS 控制台中收到此错误:
❌ Uncaught ReferenceError: require is not defined
示例代码
这是我在main.js中的最后几行
这就是我在我的render.js中所拥有的
我得到的错误在这部分const { ipcRenderer } = require('electron')
https://www.electronjs.org/docs/api/ipc-main#sending-messages
这就是我在我的内部调用我的render.js的方式<head>
截屏
我试过的
我已经关注了这个相关的 Q/A,但我仍然得到同样的错误:
Using ipc in Electron to set global variable from renderer
还有这个:Uncaught ReferenceError: require is not defined in Electron
And this:“Uncaught SyntaxError: Cannot use import statement导入 ECMAScript 6 时在模块之外
我看到有人说您需要在 main.js 中启用nodeIntegration,是的,我已启用它但仍然抛出错误:
我还尝试转换为ES6 模块语法。
同时还像这样添加type="module":
但是错误是:
❌<strong>Uncaught SyntaxError: Cannot use import statement outside a module
我一直在寻找 SO 中的解决方案,但我找不到任何解决方案,所以任何帮助将不胜感激。
重现项目和错误的步骤
初始化项目并使用所需的编辑器打开。
npx create-electron-app app
cd app
code .
然后编辑
index.js
并添加nodeIntegration: true
.编辑您
index.html
的添加<script src="renderer.js"></script>
在和文件
renderer.js
旁边的 src 文件夹中创建一个新文件。index.html
index.js
现在你应该有以下树:
+-src
---index.css
---index.html
---index.js(这是你的 main.js)
---renderer.js(这是你的 renderer.js)将示例代码添加到 index.js 和 renderer.js
运行以下命令
npm start
,将打开一个新窗口并运行 Electron 应用程序。
node.js - Electron JS 在后面运行耗时的过程
TLDR
我正在使用reZach 的repo ( https://github.com/reZach/secure-electron-template ) 作为入门指南,到目前为止效果很好。我能够来回交流 ipcMain、ipcRenderer 和 React 打字稿。
但是,我仍然缺乏很多知识。
- 请参阅图 1,其中用户将单击转换,然后我将在后台运行该过程,用户仍然可以继续其他操作。转换过程通常处理
.xlsx
大约 90MB 的文件。 - 左侧的模板
SFTP
菜单将处理连接以连续读取和写入大约 5k 个.xml
文件。
所以我的问题是:
如何在后台运行进程并2
在图 1中标记为红色的页面中显示进度。我应该使用多线程或服务工作者或子进程等来完成这些任务吗?
此外,进度条实际上并没有计算任何内容,但右侧的编号 [3] 表示还剩下多少任务。但是当用户点击进入页面时,他们会在那里看到一个正在运行的进程列表。
Electron JS 开发前的故事
我已经开发了一个使用 python 处理数据的系统,例如读取和写入大型 excel 90MB+ 并连接到 SFTP 以连续处理大约 5k+ xml 文件(连接会在大约 500 个文件后断开,但我只是以编程方式重新运行它)。到目前为止,在 python 中它运行良好,但我想通过 Electron JS 使用 Web 技术开发另一个副本。
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 的新手,请帮助我提供一些有价值的意见。如果有人遇到并解决了这个问题,请指导我正确的方向。
如果问题未解决或需要其他任何内容,请告诉我。
javascript - 如何从 preload.js 接收数据到 renderer.js
我正在单击一个按钮,该按钮会打开一个对话框以获取文件夹根目录。我目前正在使用调用/句柄。我创建了一个 promise 函数来返回我的数据,但不确定如何将我的数据从 preload.js 移动到 renderer.js
主.js
预加载.js
渲染器.js
CrawlDirectory(文件路径)
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
node.js - 使用 Electron/Nodejs 将数据从服务器传递到 html
我正在使用预加载和渲染器 js 将数据从 html 传递到服务器。我有一个主窗口,然后打开另一个窗口(添加窗口)。我从添加窗口获取数据并将其传递给服务器。我在服务器上收到数据,但我不知道如何将带有数据的回调从服务器发送到主窗口 html。
在预加载中,我有:
在渲染器添加窗口中:
在 app.js 中:
我应该在 rendererMain 中写什么来获取数据作为主窗口中的回调?主渲染器在第一次运行时执行,而不是在触发回调时执行(如果我用这些行触发了回调)。
javascript - Electron FFmpeg 进度处理
我有一个电子应用程序(带有 Angular)。
我是 Electron 和所有这些进程间事件处理的新手。
我的问题是我有这个 ipcMain 处理程序(主进程)(我从 Angular 服务“调用”):
我想要实现的是跟踪视频和音频合并的进度(可能需要几秒钟到几分钟)。但这里的问题是,一旦 Promise 被解决,它就不会发送下一个进度值(我最终会收到 3%,然后即使“合并”仍在进行中,也不会收到任何其他值)。
然后我尝试了以下(主要过程)(我无法编译):
我添加了评论来解释我想要实现的目标。在我的 Angular 服务中,我正在调用这个处理程序,如下所示:
编译时出现以下错误:
我相信还有其他一些“优雅”的方法可以在 Main 和 Renderer 进程之间实现这种行为,如果你能引导我找到任何我将不胜感激的方法。
否则,你能帮我解决这个错误吗?或者与我分享我可以阅读什么来学习如何在 Electron 中使用“Observables”。
javascript - ipcRenderer 没有收到来自 webContents.send 的消息(电子)
在我的程序的主窗口中,我有一个按钮,如果单击该按钮,则会创建一个新的附加窗口。当这个新窗口完成加载时,我想向ipcRenderer
; 但是,到目前为止ipcRenderer
,即使窗口创建成功,我也无法接收消息。
以下是 中的代码片段main.js
:
请注意,这createWindow
是一个创建并返回浏览器窗口的函数。
这是代码片段preload.js
:
如您所见,我希望在received message!
新窗口完成加载后在控制台中接收字符串;但是,这并没有发生。我究竟做错了什么?
javascript - 一个 ipcMain.on() 在同一个文件中工作,而另一个不工作?
我正在使用 Electron 和 vue 开发一个应用程序。
我使用这个解决方案在 main 和 render 之间进行通信,所以我有三个文件preload.js
,main 和 renderer。
但是,在渲染文件中,window.api.send("msgbox", "haha");
有效而window.api.send("saveall", "hahaha");
无效。
Electron 版本 13.6.6 macOS Monterey 12.1