Electron 从低版本升级到高版本 - webview通信的改造

旧版本的webview,在通信时,是通过webview.contentWindow.postMessage()跟你的url进行通信的,如果你们一开始就是使用ipcRenderer的话,那应该就不用调整了,但是如果一开始就只是使用普通的postMessage的话,就要改造一下,下面我们来改改webview的通信升级。

首先,改写一下webview需要加载的preload文件,添加contextBridge内容;

javascript 复制代码
const { contextBridge, ipcRenderer } = require('electron');
contextBridge.exposeInMainWorld('electron', {
    // 这里可以添加发送到主进程的消息
sendMessageToMain: message => {
    ipcRenderer.send('message-from-webview', message);
    ipcRenderer.sendToHost('message-from-webview', message);
  },
  onMessageFromRenderer: callback => ipcRenderer.on('ipc-message', (event, ...args) => callback(...args)),
});


// 把具体内容注入到你的webview里面

window.addEventListener('DOMContentLoaded', () => {
  const style = document.createElement('style');
  style.textContent = 'img {user-drag: none; -webkit-user-drag: none}';
  document.head.appendChild(style);
  const scriptTag = document.createElement('script');
  scriptTag.textContent = `
    (function (global) {
      window.electron.onMessageFromRenderer((msg, ...arg) => {
        // 这里可以添加回调发送给主进程的内容
        window.electron.sendMessageToMain();
    });
    })(window);
    console.debug("Script 注入成功!");
  `;
  document.body.appendChild(scriptTag).parentNode.insertBefore(scriptTag, document.body.lastChild);
});

好了,这个时候,你在加载完webview之后,就可以往里面发消息了;

javascript 复制代码
    webview.send('ipc-message', {type: 'demo'});

webview的改造不多,还有就是一些使用webview时需要注意的方法调用问题,就看看文档吧;

https://github.com/electron/electron/blob/28-x-y/docs/api/webview-tag.md

相关推荐
Cobyte3 分钟前
模板 DSL 解析器中的状态机设计
前端·javascript·vue.js
颜酱5 分钟前
# 02 | 搭骨架:用 LangGraph 编排 12 步工作流(思路)
前端·人工智能·后端
颜酱6 分钟前
02 | 搭骨架:用 LangGraph 编排 12 步工作流
前端·人工智能·后端
刘卓航众创芯云服务部1 小时前
Kimi K3复杂任务实测:我把团队最头疼的三个场景全跑了一遍
前端
软件开发技术深度爱好者1 小时前
小学英语单词魔法学园HTML5实现
javascript·html5·英语学习
勉灬之1 小时前
Next.js + Prisma 跨平台部署踩坑记
开发语言·javascript·ecmascript
cll_8692418911 小时前
一个好看的Wordpress博客文字css样式
前端·css·ui
武子康1 小时前
Shippy:确定性工具、会话级 Sandbox 与 Live-Data Eval(4 类收敛 + 7 步实现方案 + 6 类评测指标)
前端·人工智能·后端
糖果店的幽灵1 小时前
langgraph分支之 - 动态分支(Dynamic Branch)
java·前端·javascript·人工智能·langgraph
meilindehuzi_a2 小时前
Workflow 与 Agent 有什么区别:从 LangChain 流水线到智能体决策
前端·人工智能