2016-09-11 1 views
5

Ich habe eine <webview> in meiner Electron App. Ich hätte gerne eine "fremde" Kommunikation, so wie ich es mit einer iframe bis postMessage machen würde. So zum Beispiel:Kommunizieren Sie mit <webview> in Elektron

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

wird für die Kommunikation meine einzige Wahl mit diesem subwebview auf nodeIntegration so drehen, dass ich sendToHost verwenden kann? Das Einschalten von nodeIntegration allein für diese eine Funktion scheint wie Overkill.

Antwort

15

Sie können im Skript webviewpreload, einschließlich IPC, auf Elektronen-APIs zugreifen, auch wenn nodeIntegration deaktiviert ist. Ihr Preload-Skript kann Funktionen in den globalen Namespace einfügen, auf die dann innerhalb der in geladenen Seite zugegriffen werden kann. Ein einfaches Beispiel:

webview-preload.js:

const { ipcRenderer } = require('electron')  

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

webview-index.html:

<script> 
    pingHost() 
</script> 

window-index.html:

<script> 
    const webview = document.getElementById('mywebview') 
    webview.addEventListener('ipc-message', event => { 
    // prints "ping" 
    console.log(event.channel) 
    }) 
</script> 
+0

Dies war nur die Antwort, die ich suchte. Dies funktioniert, um eine Nachricht von der Webansicht an das Fenster zu senden. Wie würde ich eine Nachricht vom Fenster zum Webview senden? –

+0

@ HolgerEdwardWardlowSindbæk hast du 'webview.send()' versucht? – psulek

+0

@psulek Ich habe es herausgefunden. Ich denke, dass ich mit webview.send() ya endete. Vielen Dank. –