2016-09-11 15 views
5

Elektron uygulamasında bir <webview> var. iframe ile postMessage arasında güvenli bir şekilde "yabancı" iletişim kurmak istiyorum. Örneğin Yani:Electron uygulamasında <webview> ile iletişim kurun

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

bu subwebview ile iletişim için benim tek seçenek nodeIntegration açmak mı yani sendToHost kullanabileceği? Bu özellik için sadece nodeIntegration'u açmak overkill gibi görünüyor.

cevap

15

nodeIntegration devre dışı bırakıldığında bile IPC dahil olmak üzere webviewpreload komut dosyasında Electron API'lerine erişebilirsiniz. Önyükleme komut dosyanız, webview'da yüklenen sayfada erişilebilir olan genel ad alanına işlevleri enjekte edebilir. Basit bir örnek:

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

Bu benim aradığım sadece cevap oldu. Bu, web görünümünden pencereye mesaj göndermek için çalışır. Pencereden web görünümüne nasıl bir mesaj gönderirim? –

+0

@ HolgerEdwardWardlowSindbæk webview.send() 'ı denediniz mi? – psulek

+0

@psulek Ben bunu anladım. Ben webview.send() ya kullanarak bitti sanırım. Teşekkürler. –

İlgili konular