从 Electron 的 main 发送到渲染的数据是一个空对象

问题描述 投票:0回答:1

因此,我尝试从 main.js 发送数据,以便在渲染器中将 div 绘制到我的 html 中,在无法使用 JSON 中的内容后,我决定尝试发送一个简单的字符串,问题仍然存在,一个无用的对象。(尝试过 stringify,尝试过“toString()”,但它只是变成了一个“对象”。 有趣的是,将数据从渲染发送到主要工作完美,我正在接收它并将其存储到一个工作正常的文件中。

Main.js

const createMainWindow = () => {
      const win = new BrowserWindow({
      width: 600,
      height: 400,
      webPreferences: {
        nodeIntegration: true,
        preload: path.join(__dirname, "preload.js")
      }
    })
    win.loadFile('index.html')
    win.webContents.openDevTools();
    win.webContents.on('did-finish-load', () =>{
      win.webContents.send('loadJSON', "hello");
    })
  };

预加载.js

contextBridge.exposeInMainWorld('electronAPI', {
    storeJSON: (data) => ipcRenderer.send('storeJSON', data),
    loadJSON: (data) => ipcRenderer.on('loadJSON', data)
})

vsticker.js(渲染器)

window.electronAPI.loadJSON((data) =>{
    console.log(data);
});

我开始厌倦阅读电子文档以尝试找出发生这种情况的原因,我尝试等到页面加载,尝试使用字符串而不是我的 JSON 内容的方法,似乎没有任何效果,我只想完成这个。

另外,是的,我读过一个有非常相似问题的人的帖子,他的解决方案是等到页面完全加载,我已经尝试过这个,但它不起作用。

javascript electron
1个回答
0
投票

这是文档中

ipcRenderer.on
的签名:

ipcRenderer.on(channel, listener)

如您所见,

listener
函数的第一个参数是
event
,这就是您要记录的内容,而不是
args
。这应该效果更好:

window.electronAPI.loadJSON((_event, data) => {
  console.log(data);
});
© www.soinside.com 2019 - 2024. All rights reserved.