2016-09-11 3 views
5

私はElectronアプリで<webview>を持っています。私は安全な "外国人"のコミュニケーションをしたいと思います。iframeからpostMessageまでの私のやり方です。だから、例えば:電子で<webview>と通信します。

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

は、私がsendToHostを使用できるようにnodeIntegrationをオンにするには、このsubwebviewとの通信のための私の唯一の選択肢ですか?この1つの機能のためにnodeIntegrationのすべてをオンにすることは、過剰なもののようです。

答えて

15

nodeIntegrationが無効になっている場合でも、webviewpreloadスクリプト(IPCを含む)でElectron APIにアクセスできます。プリロードスクリプトは、関数をグローバル名前空間に挿入することができ、webviewにロードされたページ内でアクセスすることができます。簡単な例:

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

これは私が探していただけ答えました。これは、Webビューからウィンドウにメッセージを送信するために機能します。ウィンドウからWebビューにメッセージを送信するにはどうすればよいですか? –

+0

@HolgerEdwardWardlowSindbækあなたは 'webview.send()'を試しましたか? – psulek

+0

@psulek私はそれを理解し終わった。私はwebview.send()を使って終わったと思います。ありがとう。 –

関連する問題