2016-09-11 9 views
5

Mam <webview> w mojej aplikacji Electron. Chciałbym mieć bezpieczną "zagraniczną" komunikację, tak jakbym to robiła z iframe do postMessage. Tak więc na przykład:Komunikuj się z <webview> w Electron

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

jest moim jedynym wyborem dla komunikacji z tym subwebview włączyć nodeIntegration tak, że można używać sendToHost? Włączenie wszystkich nodeIntegration tylko dla tej jednej funkcji wydaje się przesadą.

Odpowiedz

15

Dostęp do funkcji API Electron można uzyskać w skrypcie webviewpreload, w tym IPC, nawet gdy nodeIntegration jest wyłączony. Twój skrypt wstępnego ładowania może wstrzykiwać funkcje do globalnej przestrzeni nazw, które będą wtedy dostępne na stronie załadowanej w webview. Prosty przykład:

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

Było to po prostu odpowiedź szukałem. Działa to w celu wysłania wiadomości z widoku WWW do okna. Jak wysłać wiadomość z okna do widoku strony internetowej? –

+0

@ HolgerEdwardWardlowSindbæk wypróbowałeś 'webview.send()'? – psulek

+0

@psulek skończyło się na tym. Myślę, że skończyłem używając webview.send() ya. Dzięki. –