Electron - ipcRenderer 在 main.js 中不起作用

时间:2021-01-20 06:47:04

标签: javascript electron

我就是想不通。如果我是对的,通常你在主文件中使用“ipcMain”(在我的例子中是 main.js)。但是我使用了colon-ide,并且在其他地方定义了ipcMain。 我想创建一个新窗口。创建新窗口所需的一切都在 main.js 文件中,但信号在其他地方。所以我需要向 main.js 发送一个“创建窗口”信号。事实上,我是从一个定义了 ipcMain 的文件中发送的。

问题来了: 在 main.js 中,我使用以下内容:

const ipc = require('electron').ipcRenderer;
ipc.on('someSignal', function (event, structure) {
     console.log("something");
});

我收到一个错误,ipc 未定义。

当我使用以下内容时:

const ipc = require('electron').ipcMain;
ipc.on('someSignal', function (event, structure) {
    console.log("something");
});

什么都没发生。它不听,我相信我应该只有一个ipcMain,所以这一定是错误的。

我做错了什么?如果您需要更多代码,请告诉我。

为了详细说明,让我向您展示这个: 我有一个 functions.js 文件,可以在其中调用事件。请忽略“结构”变量。

const ipc = require('electron').ipcMain;

function someFunction() {
    console.log("function is invoked");
    let structure = 0;
    mainWindow.webContents.send('someSignal', structure);
}

“someFunction”在某个时候被调用 - 我在控制台中收到“函数被调用”消息,所以这部分工作。

editor.js 中定义了 ipcRenderer,如果我把监听器函数放在这里:

const ipc = require('electron').ipcRenderer;

ipc.on('someSignal', function (event, structure) {
    console.log("something");
});

它有效。 “某物”被打印出来。

但是,我需要在 ma​​in.js 文件中添加侦听器,因为那是我创建新窗口的函数所在的位置。但是监听器在那里不起作用。如果我使用 ipcRenderer,它会保持未定义状态,并在我执行 ipc.on 函数时抛出错误。如果我使用 ipcMain 它被定义(typeof 返回一个对象),所以看起来这就是我必须使用的。但什么也没发生。

这是因为我试图在 2 个 ipcMain 之间发送消息吗?我可能会尝试使用全局函数作为解决方法。

1 个答案:

答案 0 :(得分:0)

要访问 BrowserWindow 中的 generateFakeAnswer = () => { const getRealAnswer = (state) => { return state.valueOne + state.valueTwo + state.valueThree; } this.setState({ fakeAnswer: Math.floor(Math.random() * 10) + getRealAnswer(this.state) }) } API,您需要在构造函数中启用 require("electron")

nodeIntegration