【问题标题】:Electron's event.sender.send doesn't send, or ipcRenderer doesn't recieveElectron event.sender.send 不发送,或者 ipcRenderer 不接收
【发布时间】:2020-08-19 15:24:12
【问题描述】:

这看起来应该很简单。我在 main.js 中有一行写着:

event.sender.send("name-prompt")

我知道这个正在被调用,当我尝试传入event 时收到警告。然后在index.js我有

ipcRenderer.on("name-prompt", () => {
    console.log("why isn't this working")
    document.getElementById("details-prompt").classList.add("visibility-override")
})

而且这永远不会运行。 webContents.send and ipcRenderer.on Not Working 使用 webContents.send,据我了解,它与 event.sender.send 不同。我对电子肯定很陌生,所以我错过了很多东西。我应该怎么做才能完成这项工作?

编辑:IPCMain.on 的完整代码

ipcMain.on("add-from-file-clicked", (event) => {
    dialog.showOpenDialog({ properties: ['openFile'] }).then(result => {
        console.log(result.canceled);
        console.log(result.filePaths);

        if (!result.canceled) {
            event.sender.send("name-prompt")
        }
    })
})

是的,我已经验证了 result.canceled 是假的。谢谢!

【问题讨论】:

  • 在 main.js 中创建 BrowserWindow 时启用 nodeIntegration
  • @tpikachu 我启用了 nodeIntegration,据我所知,如果我不这样做,它甚至都不会工作。
  • 让我看看你正在从渲染器收听的 ipcMain 部分
  • @tpikachu 当然,谢谢

标签: javascript node.js electron


【解决方案1】:
ipcMain.on("add-from-file-clicked", (event) => {
    dialog.showOpenDialog({ properties: ['openFile'] }).then(result => {
        console.log(result.canceled);
        console.log(result.filePaths);

        if (!result.canceled) {
            event.reply("name-prompt")
        }
    })
})

【讨论】:

    【解决方案2】:

    您可能想要确认您正在从 index.js 发送消息,以便 main.js 可以使用 event.sender.send() 进行响应。

    http://www.atom.pe/docs/api/ipc-main/ 的前两个代码块中的 main.js 中有一个使用 event.sender.send() 的示例。
    也许你可以对照它检查你的代码。

    【讨论】:

    • 谢谢,我正在从 index.js 发送一条消息。我对此没有任何问题。该链接实际上是我了解 event.sender.send 的地方。
    猜你喜欢
    • 2021-04-20
    • 2016-06-19
    • 1970-01-01
    • 2021-08-01
    • 2019-02-07
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    相关资源
    最近更新 更多