这个问题已经有答案了:
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';
配置。
1条答案
按热度按时间e4yzc0pl1#
幸运的是,我遇到了一个非常类似的issue。
解决方案是将loadConfig(或任何向渲染器发送内容的代码) Package 到