gpt4 book ai didi

Electron - ipcRenderer 在异步类中不起作用

转载 作者:行者123 更新时间:2023-12-03 12:26:19 24 4
gpt4 key购买 nike

我有一个带有构造函数和异步函数的类。
我已经完成了module.exports这样我就可以从我的 GUI.js 调用我的类(class)文件和我的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');

但我想在我的类里面做这件事,这和我的主文件不在同一个文件中。

最佳答案

从 Main 向 Renderer 发送消息应该通过发送到特定的 webContents 来完成。 .这就是为什么event.sender.send('myMSG', 'hello')有效,而 ipcRenderer.send 不是。如文档中所述,后者从 Renderer 发送到 Main (而且,由于您的错误告诉您它未定义,因此无法从 Main 进程访问)。

ipcMain 中所述的docs您应该访问 webContents您想发送到并调用send在那。

因此,要更正您的代码,您可以

  • 将对主窗口的引用传递给 myClass并调用send在那

    class myClass {
    constructor(args) {
    // ...
    this.mainWindow = args.win
    }
    // ...
    async Test() {
    this.mainWindow.webContents.send('myMessage', 'Hello');
    }
    }
  • send到实际聚焦的窗口( BrowserWindow.getFocusedWindow() ),如果这符合您的需要

    class myClass {
    // ...
    async Test() {
    BrowserWindow.getFocusedWindow().webContents.send('myMessage', 'Hello');
    }
    }
  • 关于Electron - ipcRenderer 在异步类中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52814192/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com