You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron中禁用remote模块时,webview与主窗口如何通信?

在Electron禁用remote模块时,webview与主窗口的通信方式

当然有通信方式啦!哪怕你把webview的enableremotemodule属性设为false,访客页面没法用remote模块,主窗口和webview里的页面依然能通过Electron自带的IPC机制正常通信,这是最常用也最稳定的方案。

下面给你具体讲讲两种方向的通信实现:

  • 主窗口给webview访客页面发消息
    主窗口的渲染进程里,先获取到webview元素,然后调用它的send方法就能直接发消息:

    // 主窗口渲染进程代码
    const webview = document.querySelector('webview');
    webview.send('greet-webview', '嘿,webview里的页面,我是主窗口!');
    

    访客页面里则需要用ipcRenderer监听对应的事件来接收:

    // webview访客页面代码
    const { ipcRenderer } = require('electron');
    ipcRenderer.on('greet-webview', (event, msg) => {
      console.log(msg); // 输出:嘿,webview里的页面,我是主窗口!
    });
    
  • webview访客页面给主窗口发消息
    访客页面里可以用ipcRenderer.sendToHost这个专门给webview宿主页面发消息的方法:

    // webview访客页面代码
    const { ipcRenderer } = require('electron');
    ipcRenderer.sendToHost('reply-main', '收到你的消息啦,主窗口!');
    

    主窗口里则监听webview的ipc-message事件来接收:

    // 主窗口渲染进程代码
    const webview = document.querySelector('webview');
    webview.addEventListener('ipc-message', (event) => {
      if (event.channel === 'reply-main') {
        console.log(event.args[0]); // 输出:收到你的消息啦,主窗口!
      }
    });
    

另外要提醒下:当enableremotemodule设为false时,访客页面确实无法访问remote模块,但ipcRenderer是不受影响的,这是Electron特意保留的跨上下文通信通道,完全可以放心用。

内容的提问来源于stack exchange,提问作者btzr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:51:20