电子-ipcRenderer在异步类中不起作用

时间:2018-10-15 10:00:21

标签: electron ipc

我有一个带有构造函数和异步函数的类。 我已经完成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');

但是我想在我的课上做,那不是和我的主文件在同一个文件中。

1 个答案:

答案 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');
      }
    }