【发布时间】:2021-01-20 06:47:04
【问题描述】:
我就是想不通。如果我是正确的,通常你在主文件中使用“ipcMain”(在我的例子中是 main.js)。但是我使用冒号-ide,而 ipcMain 是在其他地方定义的。 我想创建一个新窗口。创建新窗口所需的一切都在 main.js 文件中,但信号在其他地方。所以我需要向 main.js 发送一个“create-window”信号。事实上,我是从定义了 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");
});
它有效。 “某事”被打印出来。
但是,我需要在 main.js 文件中添加监听器,因为这是我创建新窗口的功能所在。但是侦听器在那里不起作用。如果我使用 ipcRenderer 它保持未定义,并且如果我执行 ipc.on 函数会引发错误。如果我使用 ipcMain 它会被定义(typeof 返回一个对象),所以看起来这就是我必须使用的。但是什么也没发生。
这是因为我试图在 2 个 ipcMain 之间发送消息吗?我可能会尝试使用全局函数作为解决方法。
【问题讨论】:
-
你是如何调用事件的?您还应该显示用例,就像您当前显示的代码一样,您只定义一个侦听器而不发送触发它的事件。或者这正是你提出问题的方式?还有一小部分展示了如何在Electron's Quick Start Guide 上执行此操作的示例。
-
我已经编辑了问题,请查看。我省略了我认为不相关的部分代码。如果您想要完整的代码,请告诉我。
-
也许我应该重新表述这个问题。如果 ipcMain 位于与主文件不同的文件中,如何从渲染器访问主文件的功能?要么我对所有事情都非常误导,要么全局变量也不起作用。
标签: javascript electron