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

【Electron学习笔记(三)】Electron的主进程和渲染进程

Electron的主进程和渲染进程

    • Electron的主进程和渲染进程
    • 前言
    • 正文
    • 1、主进程
    • 2、渲染进程
    • 3、Preload 脚本
        • 3.1 在项目目录下创建 preload.js 文件
        • 3.2 在 main.js 文件下创建路径变量并将 preload.js 定义为桥梁
        • 3.3 在 preload.js 文件下使用 electron 提供的contextBridge 模块
        • 3.4 在 render.js 文件下调用 contextBridge

Electron的主进程和渲染进程

前言

在Electron应用开发中,主进程与渲染进程的协作至关重要。Electron基于Chromium和Node.js,让开发者用Web技术构建跨平台桌面应用。为确保安全与性能,Electron采用主进程和渲染进程分离架构。主进程管理应用生命周期、窗口及原生功能,渲染进程则负责显示用户界面。两者通过IPC机制通信,实现数据共享与功能调用。Preload脚本在渲染进程加载前注入代码,安全暴露必要API,避免直接暴露Node.js环境。本文将深入解析这一机制,探讨两者工作原理与安全通信方法。

笔记源于:禹神:一小时快速上手Electron,前端Electron开发教程

正文

1、主进程

每个 Electron 应用都有一个单一的主进程,作为应用程序的入口点,主进程在 Node.js 环境中运行,它具有 require 模块和使用所有 Node.js API 的能力,主进程的核心就是:使用 BrowerWindow 来创建和管理窗口

2、渲染进程

每个 BrowerWindow 实例都对应一个单独的渲染器进程,运行在渲染器进程中的代码,必须遵循网页标准,这也就意味着:渲染器进程无权直接访问 require 或使用任何 Node.js 的API

3、Preload 脚本

预加载(Preload)脚本是运行在渲染进程中的,但它是在网页内容加载之前执行的,这意味着它具有比普通渲染器代码更高的权限,可以访问 Node.JS 的 API,同时又可以与网页内容进行安全的交互。
简单地说:它是 Node.JS 和 Web API 的桥梁,Preload 脚本可以安全地将部分 Node.JS 功能暴露给网页,从而减少安全风险。

3.1 在项目目录下创建 preload.js 文件

在 main.js 的同级目录下创建
在这里插入图片描述

3.2 在 main.js 文件下创建路径变量并将 preload.js 定义为桥梁
  • 获取所在路径:const path = require('path')
  • 设置 webPreferences 属性将 preload.js 定义为桥梁:webPreferences{preload:path.resolve(__dirname,"./preload.js")}
    在这里插入图片描述
3.3 在 preload.js 文件下使用 electron 提供的contextBridge 模块
console.log("preload",process.version)
const {contextBridge} = require("electron")

contextBridge.exposeInMainWorld('myAPI',{
    version:process.version
})

在这里插入图片描述

3.4 在 render.js 文件下调用 contextBridge
const btn1=document.getElementById("btn1")
console.log("render")
// 绑定点击事件
btn1.onclick=()=>{
    // alert("已弹出")
    alert(myAPI.version)
}

在这里插入图片描述
至此,我们可以通过渲染进程访问 require 或使用 Node.js 的API:在这里插入图片描述


http://www.kler.cn/a/418794.html

相关文章:

  • TiDB 无统计信息时执行计划如何生成
  • YOLOv8-ultralytics-8.2.103部分代码阅读笔记-files.py
  • 把当下的快乐和长远的目标连接在一起。
  • 【电子通识】失效分析的流程和方法
  • 前端入门指南:模块打包器是什么?模块打包器的工作原理与实践
  • 互联网基础
  • 【论文复现】从零开始搭建图像去雾神经网络
  • 【软考速通笔记】系统架构设计师⑧——系统质量属性与架构评估
  • 14 - Java 面向对象(中级)
  • SqlServer REVERSE字符串值的逆序排序函数
  • 框架学习07 - SpringMVC 其他功能实现
  • Cisco WebEx 数据平台:统一 Trino、Pinot、Iceberg 及 Kyuubi,探索 Apache Doris 在 Cisco 的改造实践
  • 线性表-链式描述(C++)
  • 【联表查询】.NET开源 ORM 框架 SqlSugar 系列
  • 【C语言】扫雷游戏(一)
  • 火山引擎VeDI在AI+BI领域的演进与实践
  • Web开发基础学习——理解React组件中的根节点
  • 【计网不挂科】计算机网络——<34道经典简述题>特训
  • Vue.js 深入探索:自定义指令与插件开发
  • vscode远程连接ssh
  • React前端进阶面试(七)
  • 将面具贴到人脸上的过程
  • 【Axure高保真原型】视频列表播放器_横向翻页效果
  • PHP和GD库如何给图片添加反色效果
  • 如何在Solana链上开发Dapp?RPC节点的要求
  • 硬菜3道+馒头