Electron 与<;网络视图>;电子

Electron 与<;网络视图>;电子,electron,Electron,我的电子应用程序中有一个。我想要安全的“国外”通信,就像我通过postMessage使用iframe一样。例如: webview.executeJavaScript(“window.parent.postMessage('all done!')); 是否只有打开节点集成,才能使用发送主机,才能与此子网站视图通信?仅为这一项功能打开所有的nodeIntegration似乎有些过分。即使禁用了nodeIntegration,您也可以在webview脚本中访问Electron API,包括IPC。您

我的电子应用程序中有一个
。我想要安全的“国外”通信,就像我通过
postMessage
使用
iframe
一样。例如:

webview.executeJavaScript(“window.parent.postMessage('all done!'));


是否只有打开
节点集成
,才能使用
发送主机
,才能与此子网站视图通信?仅为这一项功能打开所有的
nodeIntegration
似乎有些过分。

即使禁用了
nodeIntegration
,您也可以在
webview
脚本中访问Electron API,包括IPC。您的预加载脚本可以将函数注入全局名称空间,然后可以在
webview
中加载的页面中访问这些函数。一个简单的例子:

webview preload.js

const { ipcRenderer } = require('electron')    

global.pingHost = () => {
  ipcRenderer.sendToHost('ping')
}
webview index.html

<script>
  pingHost()
</script>
<script>
  const webview = document.getElementById('mywebview')
  webview.addEventListener('ipc-message', event => {
    // prints "ping"
    console.log(event.channel)
  })
</script>
最简单的方法
沟通是

注: (main.js或app.js或background.js或process.js)无需传递(直接将组件传递给组件),我成功地在electron:3.1.10中实现了 用于打印html Web视图

网络视图窗口

示例1.html

    <webview id="paper" style="width:300px;height:800px" src="file:///static/mywebview.html" nodeintegration></webview>
const ipcRenderer = require("electron").ipcRenderer;
webview.addEventListener("ipc-message",(event)=>{

const {args,channel}=event;

if(channel=="readyCompanyInfo")
{
console.log(channel,args)
//here you can see data what u passed from webview to window
console.log(args[0])

}
})
从mycomponent或window获取数据(我直接从组件发送)

mywebview.html

<!---what data you want show----!>
webview到窗口

Webview到窗口(直接传递到组件)

mywebview.js

    const {
        ipcRenderer
    } = require('electron')                                                                            
  //data from window                                                                   
    ipcRenderer.on('ping', (e, data) => { console.log(data) })
 ipcRenderer.sendToHost("readyCompanyInfo",data) 
在我的窗口中,例如我使用vue(mycomponent.vue或mypage)

示例1.html

    <webview id="paper" style="width:300px;height:800px" src="file:///static/mywebview.html" nodeintegration></webview>
const ipcRenderer = require("electron").ipcRenderer;
webview.addEventListener("ipc-message",(event)=>{

const {args,channel}=event;

if(channel=="readyCompanyInfo")
{
console.log(channel,args)
//here you can see data what u passed from webview to window
console.log(args[0])

}
})

这正是我想要的答案。这用于将消息从webview发送到窗口。如何从窗口向网络视图发送消息?@Holgeredrowsindbæk您是否尝试了
webview.send()
?@psulek我最终找到了答案。我想我最后用的是webview.send()了。谢谢。嗨,我也在尝试同样的东西,但在windows上似乎没有这样的工作?或者子窗口需要与主进程对话才能与其他窗口通信?