我试图在我的Electron 应用程序中将数据从Main.js发送到Renderer.js,但一旦它进入preload.js,它就会在一个空对象中转换.

在main.js中:

  win.once('ready-to-show', () => {
    win.webContents.send('setVideoSources', "test");
  })

在prelaod.js中:

contextBridge.exposeInMainWorld('videoEvent', {
  setVideoSources: (callback) => ipcRenderer.on('setVideoSources', (sources) => {
    console.log(sources)
    callback(sources);
  }),
});

在renderer.js中

window.videoEvent.setVideoSources((sources) => {
  console.log(sources)
});

这两个console.log都显示一个空对象,我找不到为什么可以检索我的数据.(这里是"test",但当我try 将"真实数据"作为对象发送时,它显然是相同的).

如果有人有主意,让我知道!

推荐答案

在您的Electron应用程序中,您在将数据从main.js传递到renderer.jspreload.js时遇到的问题似乎与如何处理IPC(进程间通信)消息有关.

在Electron中,ipcRenderer.on函数接收两个参数:频道名称和事件对象.从主进程发送的实际数据包含在事件对象中.在您当前的实现中,您将整个事件对象视为您的数据,这就是为什么您在控制台日志(log)中看到一个空对象.

以下是修改代码以正确访问发送的数据的方法:

main.js:

你的main.js美元看起来没问题.您正在发送一条包含数据"test"的消息setVideoSources.

win.once('ready-to-show', () => {
  win.webContents.send('setVideoSources', "test");
});

preload.js:

preload.js中,修改setVideoSources函数以正确地从事件对象中提取数据.

contextBridge.exposeInMainWorld('videoEvent', {
  setVideoSources: (callback) => ipcRenderer.on('setVideoSources', (event, data) => {
    console.log(data); // Now 'data' should be the actual data sent from main process
    callback(data);
  }),
});

renderer.js:

您的renderer.js现在应该会收到正确的数据:

window.videoEvent.setVideoSources((data) => {
  console.log(data); // This should now log 'test' or any other data you send
});

您应该能够在这两条console.log语句中看到正确的数据(在本例中为"test").关键的更改在preload.js中,您需要从ipcRenderer.on提供的事件对象中正确地提取数据.

Javascript相关问答推荐

ReactJS中的material UI自动完成类别

当promise 在拒绝处理程序被锁定之前被拒绝时,为什么我们会得到未捕获的错误?

我试图实现用户验证的reduxstore 和操作中出了什么问题?

我应该在redux reducer中调用其他reducer函数吗?

了解Node.js中的EventEums和浏览器中的addEventEums之间的关系

Google图表时间轴—更改hAxis文本 colored颜色

扫描qr code后出错whatter—web.js

JS—删除对象数组中对象的子对象

我怎么才能得到Kotlin的密文?

提交链接到AJAX数据结果的表单

JavaScript是否有多个`unfined`?

为什么JPG图像不能在VITE中导入以进行react ?

向数组中的对象添加键而不改变原始变量

构建器模式与参数对象输入

在SuperBase JS客户端中寻址JSON数据

React Refs不与高阶组件(HOC)中的动态生成组件一起工作

如何让SVG图标在被点击和访问后改变 colored颜色 ,并在被访问后取消点击时恢复到原来的 colored颜色 ?

通过解构/功能组件接收props-prop验证中缺少错误"

Refine.dev从不同的表取多条记录

通过ng-绑定-html使用插入的HTML中的函数