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
相关产品推荐
相关产品推荐

