electron+VUE Browserwindow与webview通信

仅做记录

前言:

electron+VUE+VITE框架,用的是VUE3.0

主进程定义:用于接收webview发送的消息

复制代码
ipcMain.on('MyWebviewMessage', (event, message) => {
  logger.info('收到webmsg=' + message)
  //转发给渲染进程
   
})

porelaod/webPreload.js定义

复制代码
const { contextBridge, ipcRenderer } = require('electron')

contextBridge.exposeInMainWorld('electronAPI', {
  send: (channel, data) => {
    ipcRenderer.send(channel, data)
  },
})

VUE文件中定义

复制代码
<template>
  <div class="XXX">
    <el-scrollbar height="98%">
      <webview
        id="webViewId"
        allowpopups
        :preload="preloadPath"
        :src="url"
      ></webview>
    </el-scrollbar>
  </div>
</template>

最关键的preloadpath

我在script中如下定义

复制代码
const preloadPath = ref<string>('')
复制代码
const filePath = await window.api.GetWebViewPreloadPath()
console.log('filePath=' + filePath)
preloadPath.value = `file:///${filePath}`

其中preloadPath需要以file:///开头的绝对路径

例如:file:///C:/porelaod/webPreload.js

可以使用注入JS方式来实现调用window.electronAPI.send('MyWebviewMessage')

例如:

//获取VUE中定义的webView中的id

const webview: any = document.getElementById('webViewId')

复制代码
onMounted(async () => {
webview?.addEventListener('dom-ready', () => {
  setTimeout(() => {
    // 打开webview devtools
    //webview.openDevTools()
    //注入JS
    webViewExecuteJS(webview)
  }, 500)
})
复制代码
function webViewExecuteJS(webview: any) {
window.electronAPI.send('MyWebviewMessage', '测试')
 }
const injectScript = `
  document.addEventListener('click', ${handleClick.toString()});
`
// 在webview中注入脚本
webview.executeJavaScript(injectScript)

需要注意的地方

1,porelaod注入的路径需要以file:///开头的绝对路径,如果不能保证 可以直接在vue中如下写法来进行测试

<template> <div class="XXX"> <el-scrollbar height="98%"> <webview id="webViewId" allowpopups :preload="file:///C:/porelaod/webPreload.js" :src="url" ></webview> </el-scrollbar> </div> </template>

2,通过

复制代码
webview.openDevTools()打开webview的控制台

附图

如果能看到webview控制台里面的命令:window.electronAPI 说明已经通信成功了,后面就可以自己实现自己的逻辑了

相关推荐
Lkstar26 分钟前
Vue keep-alive 原理全解:LRU 缓存策略、源码级理解
前端·vue.js·面试
ZC跨境爬虫1 小时前
跟着 MDN 学CSS day_13 :(深入理解CSS中的元素尺寸调整)
前端·javascript·css·ui·html·tensorflow
threelab1 小时前
Three.js 加载 3D Tiles 瓦片数据 | 三维可视化 / AI 提示词
开发语言·前端·javascript·人工智能·3d·着色器
_洋2 小时前
Three.js加载 .obj文件 和 .gltf文件
开发语言·javascript·ecmascript
梦想CAD控件2 小时前
网页端对DWG图纸进行预览与批注(CAD轻量化)
java·前端·javascript
代码煮茶2 小时前
Vue3 埋点实战 | 从 0 搭建前端用户行为埋点系统
vue.js
JustNow_Man3 小时前
【opencode】安装使用daytona沙箱插件
android·java·javascript
wait3 小时前
Vibe Coding 开发技巧
前端·javascript·人工智能
ZengLiangYi3 小时前
Vercel AI SDK 入门:一行代码切换 LLM Provider
前端·javascript·aigc
三乐2283 小时前
原型链是什么?五分钟教会你
javascript