我正在使用**Main
›Preload
›Renderer
**进程堆栈。
preload.js
的名称
const { contextBridge, ipcRenderer } = require('electron')
contextBridge.exposeInMainWorld('ipcRenderer', ipcRenderer)
renderer.js
的名称
console.log(ipcRenderer) // it shows something like:
/**
{_events: {…}, _eventsCount: 0, _maxListeners: undefined, send: ƒ, sendSync: ƒ, …}
invoke: ƒ ()
postMessage: ƒ ()
send: ƒ ()
sendSync: ƒ ()
sendTo: ƒ ()
sendToHost: ƒ ()
Symbol(kCapture): false
_events: {}
_eventsCount: 0
_maxListeners: undefined
__proto__: Object
**/
console.log(ipcRenderer.on) // undefined
当尝试使用ipcRenderer.on()
方法时,它会记录错误:
Uncaught TypeError: ipcRenderer.on is not a function
这个方法在更新的版本中被删除了吗?是什么导致它在渲染器进程中不可用?
4条答案
按热度按时间5ktev3wc1#
这里有一个小的变通办法。但我不认为这是一个安全的好主意。
xxls0lw82#
正如ipcRenderer的电子API文档所述,“
ipcRenderer
模块是一个EventEmitter”。Electron引用的这个“EventEmitter”是node.js的EventEmitter类。Electron的
ipcRenderer
模块继承了节点的EventEmitter类。console.log(ipcRenderer)
可以查看的方法是Electron的方法。所有继承的方法都可以在Prototype对象中找到,这正是您可以找到on()
方法的地方。要查看这一点,请将
console.log(ipcRenderer)
添加到一个典型的、格式良好的、安全且可读的preload.js
脚本中。preload.js
(主线程)现在,打开Chrome的DevTools并查看Console选项卡。
Chrome DevTools - Console Tab Output
(渲染线程)enyaitl33#
这里有一个小的变通办法。
dxpyg8gm4#
这是解决这个问题的一个好方法。