如何从主进程调用渲染器视图中的函数

Cyr*_*pta 2 electron

我试图将一些数据从主进程发送到渲染器(浏览器视图),但似乎遇到了障碍。

当我调用 window.webContents.send 时,该事件只能在预加载中被捕获。我想使用此函数修改渲染器上的数据(修改屏幕的内容)。

预加载似乎是一条相当单向的道路,我可以从 html 视图中调用方法,但是如何从预加载中调用 html 视图呢?

或者如何将信息从主视图发送到渲染器视图并在那里修改 html?

有什么建议么?

eri*_*ick 6

当我调用 window.webContents.send 时,该事件只能在预加载中被捕获。我想使用此函数修改渲染器上的数据(修改屏幕的内容)。

您可以通过预加载脚本中的上下文桥公开函数。这将允许您的渲染器设置一个接收来自主进程的消息的侦听器。

下面是一个计数器的玩具示例,它将增加 HTML 中的计数器:

// main process
mainWindow.webContents.send('update-counter', 1)
Run Code Online (Sandbox Code Playgroud)
// preload
const { contextBridge, ipcRenderer } = require('electron')

contextBridge.exposeInMainWorld('electronAPI', {
  handleCounter: (callback) => ipcRenderer.on('update-counter', callback)
})
Run Code Online (Sandbox Code Playgroud)
// renderer process
const counter = document.getElementById('counter')

window.electronAPI.handleCounter((event, value) => {
    const oldValue = Number(counter.innerText)
    const newValue = oldValue + value
    counter.innerText = newValue
})
Run Code Online (Sandbox Code Playgroud)
<!--html-->
<body>
  Current value: <strong id="counter">0</strong>
  <script src="./renderer.js"></script>
</body>
Run Code Online (Sandbox Code Playgroud)