当前位置: 首页 > wzjs >正文

偃师 做网站网站模板源码

偃师 做网站,网站模板源码,二维码样式大全制作,网站绑定微信号📡 深入理解 Electron 的 IPC 通信机制:主渲染进程消息传递实战 在 Electron 中,应用由两部分组成: 主进程(Main Process):负责创建和管理窗口,控制应用生命周期。渲染进程&#x…

📡 深入理解 Electron 的 IPC 通信机制:主渲染进程消息传递实战

在 Electron 中,应用由两部分组成:

  • 主进程(Main Process):负责创建和管理窗口,控制应用生命周期。
  • 渲染进程(Renderer Process):负责渲染 UI,每个窗口独立运行,基于 Chromium。

由于这两个进程是相互隔离的,它们之间的通信就显得尤为重要,Electron 提供了 IPC(Inter-Process Communication,进程间通信)机制,帮助它们高效、安全地进行消息传递。


🧠 IPC 模块简介

Electron 提供了两个核心模块用于 IPC 通信:

模块所在进程作用
ipcMain主进程监听渲染进程发送的消息
ipcRenderer渲染进程向主进程发送消息

此外,为了增强安全性,自 Electron 12+ 推荐使用 contextBridgepreload.js 实现隔离通信。


📦 场景准备:主进程与渲染进程通信实例

📁 项目结构简要

my-electron-app/
├── main.js          # 主进程入口
├── preload.js       # 渲染进程预加载脚本
├── index.html       # 页面 UI
├── renderer.js      # 渲染进程逻辑
├── package.json

🧩 主 → 渲染:主进程发送消息

main.js

const { app, BrowserWindow, ipcMain } = require('electron');
const path = require('path');function createWindow() {const win = new BrowserWindow({width: 800,height: 600,webPreferences: {preload: path.join(__dirname, 'preload.js'),}});win.loadFile('index.html');// 模拟 3 秒后主进程发消息给渲染进程setTimeout(() => {win.webContents.send('main-to-render', '你好,来自主进程的数据!');}, 3000);
}app.whenReady().then(createWindow);

preload.js

const { contextBridge, ipcRenderer } = require('electron');contextBridge.exposeInMainWorld('electronAPI', {onMainMessage: (callback) => ipcRenderer.on('main-to-render', (event, data) => callback(data))
});

renderer.js(在 HTML 中通过 <script> 引入)

window.electronAPI.onMainMessage((data) => {document.getElementById('msg').innerText = `收到主进程消息:${data}`;
});

index.html

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>IPC 示例</title></head>
<body><h2 id="msg">等待主进程消息...</h2><script src="renderer.js"></script>
</body>
</html>

🔄 渲染 → 主进程:用户触发事件发送消息

renderer.js(新增按钮事件)

document.getElementById('sendBtn').addEventListener('click', () => {window.electronAPI.sendMessageToMain('Hello from renderer!');
});

preload.js

contextBridge.exposeInMainWorld('electronAPI', {sendMessageToMain: (msg) => ipcRenderer.send('render-to-main', msg),onMainMessage: (callback) => ipcRenderer.on('main-to-render', (event, data) => callback(data))
});

main.js

ipcMain.on('render-to-main', (event, msg) => {console.log('渲染进程发来的消息:', msg);
});

index.html(增加按钮)

<button id="sendBtn">发送消息到主进程</button>

🔐 为什么要用 preload + contextBridge?

Electron 推荐启用 contextIsolation 安全隔离,直接在渲染页面里访问 ipcRenderer 会被禁止,所以我们必须通过 preload.js 暴露安全接口。

优点:

  • 保证 window 对象的干净与安全;
  • 防止第三方脚本攻击;
  • 符合官方最佳实践。

📬 常见 IPC API 汇总

API说明
ipcRenderer.send(channel, data)渲染进程 → 主进程,异步发送
ipcMain.on(channel, callback)主进程接收消息并处理
ipcRenderer.invoke() / ipcMain.handle()支持异步 Promise 风格调用
webContents.send(channel, data)主进程 → 渲染进程发送
ipcRenderer.on(channel, callback)渲染进程接收主进程消息

💡 实战技巧

  • 推荐使用 invoke/handle 进行带返回值的请求处理,适合表单数据交互、数据库访问等。
  • 如果有多个窗口,需根据 event.senderFramewebContents.id 精准控制发送。
  • 可使用 uuid 维护请求唯一性,实现双向完整通信。

✅ 总结

  • 主渲染进程间必须使用 IPC 通信;
  • 推荐使用 contextBridge + preload.js 实现安全通信;
  • 灵活使用 send/oninvoke/handle 实现双向交互;
  • 在大型项目中,建议封装消息协议或使用状态管理来统一通信逻辑。
http://www.dtcms.com/wzjs/159202.html

相关文章:

  • 饰品网站模版电子商务推广
  • 网站简约式布局特点网络服务公司
  • 在哪里可以做网站广州seo推广服务
  • 深圳网站建设深圳简单的网页设计作品
  • 国外免费个人空间seo秘籍优化课程
  • 抄袭网站模板凡科建站怎么建网站
  • 用vb做网站导航栏如何注册网址
  • 做网站是靠什么挣钱seo网站优化助理
  • 手机怎样下载安装建设银行网站如何在百度提交网站
  • 自己做的网站不备案行吗个人推广平台
  • 做三年网站需要多少钱百度账号登陆入口
  • dedecms做中英文网站李江seo
  • 抚州企业网站做优化黄冈网站推广
  • 泰安那家网好贴吧aso优化贴吧
  • 毕业论文网站建设的重点难点前端优化网站
  • 湖南省人民政府网站友情链接seo
  • 个人网站建设策划书怎么写免费的郑州网络推广服务
  • wordpress点赞 1免费网站seo
  • 做网站公司排名是什么青岛seo网站推广
  • 陕西建设网综合服务中心网站百度识图在线网页版
  • 深圳网站建设联雅网络营销型网站的分类不包含
  • 怡清源在慧聪网网站建设情况百度推广的费用
  • 有哪些是用到了网站推广网络营销岗位描述的内容
  • 找网络公司做的网站到期后 备案的域名属于备案企业还是网络公司志鸿优化网
  • 阿克苏网站建设价格百度小说风云榜
  • 网站做境外第三方支付百度风云排行榜
  • 针对人群不同,网站做细分营销网站大全
  • 网页制作怎么做多个网站百度视频免费下载
  • 东莞市传送机技术支持 网站建设seo是怎么优化的
  • 租车行网站模版sem是指什么