首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ElectronJS: Uncaught : ipcRenderer.on不是一个函数

ElectronJS: Uncaught : ipcRenderer.on不是一个函数
EN

Stack Overflow用户
提问于 2021-10-26 06:55:07
回答 1查看 785关注 0票数 2

使用:电子v15.2.0使用 https://github.com/electron/electron-quick-start

我知道这是一个很简单的问题,但我似乎找不到解决办法。这是密码。

main.js:

代码语言:javascript
运行
复制
// Get Tasks
ipcMain.on('json:get', (event, dataset) => {

  // Read the JSON file
  fs.readFile('./data/data.json', 'utf8', (err, jsonString) => {

    // Throw error to console if there is one
    if (err) {
      console.log("File read failed:", err)
      return
    }

    console.log(`JSON Data: ${jsonString}`)

    // Send returned JSON data to mainWindow
    mainWindow.webContents.send('tasks.return', jsonString)

  })
})

preload.js:

代码语言:javascript
运行
复制
const { contextBridge, ipcRenderer } = require('electron')
contextBridge.exposeInMainWorld('ipcRenderer', ipcRenderer)

renderer.js

代码语言:javascript
运行
复制
document.getElementById('test').addEventListener('click', () => {
    ipcRenderer.send('json:get', 'tasks')
})

ipcRenderer.on('tasks.return', (event, json) => {
    console.log(json)
})

所发生的是事件侦听器正确地触发,我知道,因为JSON将从main.js代码转储到控制台,但它不是从renderer.js代码触发的。我得到了错误:Uncaught TypeError: ipcRenderer.on is not a function,但是它被调用了:

代码语言:javascript
运行
复制
ipcRenderer.on('tasks.return', (event, json) => {
    console.log(json)
})

但是,没有使用事件侦听器激发调用它。

我试着补充:

代码语言:javascript
运行
复制
const electron = require('electron')
const { ipcRenderer } = electron

对于renderer.js,但是我得到了一个错误:Uncaught SyntaxError: Identifier 'ipcRenderer' has already been declared,但两者都不起作用。

我知道我需要缩短contextBridge和ipcRenderer在preload.js文件中的范围,我会的,但问题是我无法让电子应用程序将消息发送回mainWindow。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-26 17:00:34

我相信你看到本期了。在启用上下文隔离的情况下,ipcRenderer没有on方法?渲染器。

解决方案是将ipcRenderer.on逻辑移动到预加载脚本中,如下所示(完整的代码示例这里):

代码语言:javascript
运行
复制
contextBridge.exposeInMainWorld("api", {
    onResponse: (fn) => {
        ipcRenderer.on("tasks.return", (event, ...args) => fn(...args));
    }
});

然后你的渲染器可以:

代码语言:javascript
运行
复制
window.api.onResponse((json) => console.log(json));

(请记住提到这里解决方案的内存泄漏)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69718631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档