将本地文件的内容传递到Electron上的渲染器[重复]

c6ubokkw  于 2023-09-28  发布在  Electron
关注(0)|答案(1)|浏览(130)

这个问题已经有答案了

webContents.send and ipcRenderer.on Not Working(1个答案)
上个月关门了。
我试图在主进程中读取本地磁盘上的文件,然后将其内容发送到渲染进程。虽然文件读取正确(正如我在main的控制台中看到的那样),但由于某种原因,渲染器端没有接收到数据。
我今天刚开始使用这个样板文件https://github.com/electron-react-boilerplate/electron-react-boilerplate
下面是我的代码:main.ts

mainWindow.loadURL(resolveHtmlPath('index.html'));

  // I put reading file in a separate function with callback
  loadConfig('config.xml', (config) => {
    mainWindow?.webContents.send('config', config);
  });

  mainWindow.on('ready-to-show', () => {

utils.ts

export function loadConfig(
  configPath: string,
  sendConfig: (config: any) => void
) {
  if (fs.existsSync(configPath)) {
    fs.readFile(configPath, 'utf-8', (err, data) => {
      const parser = new XMLParser();
      const config = parser.parse(data);
      console.log(config);
**      sendConfig(config);
**    });
  }

最后,这里是我的index.ts。我包括了这一切,因为样板的代码是工作的,而我的'配置'不。

import { createRoot } from 'react-dom/client';
import App from './App';

const container = document.getElementById('root') as HTMLElement;
const root = createRoot(container);
root.render(<App />);

// calling IPC exposed from preload script
window.electron.ipcRenderer.once('ipc-example', (arg) => {
  // eslint-disable-next-line no-console
  console.log(arg);
});
window.electron.ipcRenderer.sendMessage('ipc-example', ['ping']);

// Nothing is logged
window.electron.ipcRenderer.on('config', (config) => {
  console.log('config');
});

如果需要的话,你可以在boilerplate的github中找到preload.ts,我在这里只添加了export type Channels = 'ipc-example' | 'config';配置。

e4yzc0pl

e4yzc0pl1#

幸运的是,我遇到了一个非常类似的issue
解决方案是将loadConfig(或任何向渲染器发送内容的代码) Package 到

mainWindow.webContents.on('did-finish-load', ()=>{
  // My loadConfig or your code
})

相关问题