electronのwebviewとipcで通信する方法
6689 ワード
開発環境
electron-vue-typescript-starterをベースに実装しました。
- electron
- typescript
- vue.js
実装方法
vueコンポーネントファイル
HogePage.vue
<template>
<webview
src="http://localhost:3000/"
partition="persist:hoge"
:preload="preload"
autosize
allowpopups
/>
</template>
<script lang="ts">
import Vue from "vue";
export default Vue.extend({
name: "hoge-page",
data () {
return {
preload: `file:${require('path').resolve(__dirname, '../path/to/preload.js')}`
}
},
mounted () {
const webview: any = document.querySelector('webview')
webview.addEventListener("ipc-message", (event: any) => {
console.log("channel: " + event.channel)
})
webview.addEventListener('dom-ready', () => {
webview.openDevTools() // webview側のデベロッパーツールを表示する。うざかったら消していい。
webview.send("ping")
})
}
});
</script>
preloadファイル(javascript)
preload.js
const {ipcRenderer} = require('electron')
ipcRenderer.on('ping', (e, data) => {
ipcRenderer.sendToHost('pong');
});
window.onload = function(event) {
ipcRenderer.sendToHost("onload")
}
動作確認
HogePage.vue
<template>
<webview
src="http://localhost:3000/"
partition="persist:hoge"
:preload="preload"
autosize
allowpopups
/>
</template>
<script lang="ts">
import Vue from "vue";
export default Vue.extend({
name: "hoge-page",
data () {
return {
preload: `file:${require('path').resolve(__dirname, '../path/to/preload.js')}`
}
},
mounted () {
const webview: any = document.querySelector('webview')
webview.addEventListener("ipc-message", (event: any) => {
console.log("channel: " + event.channel)
})
webview.addEventListener('dom-ready', () => {
webview.openDevTools() // webview側のデベロッパーツールを表示する。うざかったら消していい。
webview.send("ping")
})
}
});
</script>
preload.js
const {ipcRenderer} = require('electron')
ipcRenderer.on('ping', (e, data) => {
ipcRenderer.sendToHost('pong');
});
window.onload = function(event) {
ipcRenderer.sendToHost("onload")
}
デベロッパーツールのログに以下のように出力されれば成功
channel: onload
channel: pong
参考
Author And Source
この問題について(electronのwebviewとipcで通信する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/k-yamada-github/items/31f87475b68d63badcfb著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .