module.exports
,以便可以从我的GUI.js
文件和我的GUI.js
文件中调用我的课程,我已经要求该课程,并且一切正常。
但是在我的课堂上,我试图这样做ipcRenderer.send('message', 'Hello');
我收到此错误:
TypeError: Cannot read property 'send' of undefined
是否可以在我的GUI.js中远程ipcRenderer?
谢谢。
我在我的主文件中需要该模块,并且在我的渲染器文件中它发送了ipcRenderer.send('startMyClass');
在我的主文件中:ipcMain.on('startMyClass', (event, args) => {
const client = new myClass();
client.Start();
})
这是我的主文件中需要的class / index.js文件。
const request = require('request-promise');
const cheerio = require('cheerio');
const { ipcRenderer } = require('electron')
class myClass {
constructor() {
this._jar = request.jar();
this._request = request.defaults({ jar: this._jar });
}
async Start() {
await this.Test();
};
async Test() {
ipcRenderer.send('myMessage', 'Hello');
}
}
module.exports = myClass;
编辑: 如果我不需要它,并且整个类都在我的主文件中,则可以执行event.sender.send('myMSG','hello');
但是我想在我的课上做,那不是和我的主文件在同一个文件中。
答案 0 :(得分:1)
从Main发送到Renderer的消息应该通过发送到特定于 webContents
的方式完成。这就是event.sender.send('myMSG', 'hello')
有效而ipcRenderer.send
不起作用的原因。后者按照文档中的说明将从渲染器发送到 Main(而且,由于您的Error告诉您它是未定义的,因此无法从Main进程进行访问)。
如ipcMain
的{{3}}中所述,您应该访问要发送给的webContents
,并在其上致电send
。
因此,为了更正您的代码,您可以
将对主窗口的引用传递到myClass
并在其上调用send
class myClass {
constructor(args) {
// ...
this.mainWindow = args.win
}
// ...
async Test() {
this.mainWindow.webContents.send('myMessage', 'Hello');
}
}
或者send
(如果适合您的需求)到实际聚焦的窗口(docs)
class myClass {
// ...
async Test() {
BrowserWindow.getFocusedWindow().webContents.send('myMessage', 'Hello');
}
}