【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:在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/927467.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

桶装水递送系统

一、前言 随着人们生活水平的提高和健康意识的增强,桶装水作为一种方便、安全的饮用水供应方式,在家庭、办公室及各类公共场所得到了广泛应用。然而,传统的桶装水订购与递送过程存在诸多不便,如客户下单方式繁琐、递送信息不透明、…

COMSOL工作站:配置指南与性能优化

COMSOL Multiphysics 求解的问题类型相当广泛,提供了仿真单一物理场以及灵活耦合多个物理场的功能,供工程师和科研人员来精确分析各个工程领域的设备、工艺和流程。 软件内置的#模型开发器#包含完整的建模工作流程,可实现从几何建模、材料参数…

大数据技术Kafka详解 ② | Kafka基础与架构介绍

目录 1、kafka的基本介绍 2、kafka的好处 3、分布式发布与订阅系统 4、kafka的主要应用场景 4.1、指标分析 4.2、日志聚合解决方法 4.3、流式处理 5、kafka架构 6、kafka主要组件 6.1、producer(生产者) 6.2、topic(主题) 6.3、partition(分区) 6.4、consumer(消费…

PowerShell:查找并关闭打开的文件

Get-SmbOpenFile 打开 Windows PowerShell 并运行 Get-SmbOpenFile | Format-List 若要仅显示特定文件共享的连接,请使用 Where-Object 运行 Get-SmbOpenFile。 Get-SmbOpenFile | Where-Object Path -eq "C:\Data\" | Format-List Get-SmbSession 显…

【381】基于springboot的银行客户管理系统

摘 要 伴随着信息技术与互联网技术的不断发展,人们进到了一个新的信息化时代,传统管理技术性没法高效率、容易地管理信息内容。为了实现时代的发展必须,提升管理高效率,各种各样管理管理体系应时而生,各个领域陆续进到…

Git常用命令参考手册

Git常用命令参考手册 整理了一篇git常用的命令参考手册,命令顺序按照一个项目从头到尾的常用命令顺序做了排序,后续会继续完善内容示例并补全其他命令使用说明,希望对不熟悉的小伙伴有所帮助。 git config # 配置列表 git config --list #…

form表单阻止默认事件及获取值

阻止form的默认事件 方法1 采用行内js的onsubmit,那么实参必须使用保留的关键词event <form action"" id"aa" name"bb" onsubmit"cdma(event)"><input type"text" name"zhangsan" > </form>…

【Linux-进程信号】可重入函数+volatile关键字+SIGCHLD信号+重谈系统调用

可重入函数 首先我们看一个例子&#xff0c;单链表的头插&#xff1b; main函数调用insert函数向一个链表head中插入节点A&#xff0c;插入操作分为两步&#xff0c;刚做完第一步的时候&#xff0c;因为硬件中断使进程切换到内核&#xff0c;再次回用户态之前检查到有信号待处…

以AI算力助推转型升级,暴雨亮相CCF中国存储大会

2024年11月29日-12月1日&#xff0c;CCF中国存储大会&#xff08;CCF ChinaStorage 2024&#xff09;在广州市长隆国际会展中心召开。本次会议以“存力、算力、智力”为主题&#xff0c;由中国计算机学会&#xff08;CCF&#xff09;主办&#xff0c;中山大学计算机学院、CCF信…

vulnhub靶场【哈利波特】三部曲之Aragog

前言 使用virtual box虚拟机 靶机&#xff1a;Aragog : 192.168.1.101 攻击&#xff1a;kali : 192.168.1.16 主机发现 使用arp-scan -l扫描&#xff0c;在同一虚拟网卡下 信息收集 使用nmap扫描 发现22端口SSH服务&#xff0c;openssh 80端口HTTP服务&#xff0c;Apach…

【Leetcode】26.删除有序数组中的重复项

题目链接&#xff1a; https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述&#xff1a; 解题思路&#xff1a; 使用双指针算法&#xff08;快慢指针&#xff09;&#xff0c;p1与p2…

深度学习开端知识

深度学习概述 什么是深度学习 人工智能、机器学习和深度学习之间的关系&#xff1a; 机器学习是实现人工智能的一种途径&#xff0c;深度学习是机器学习的子集&#xff0c;区别如下&#xff1a; 传统机器学习算法依赖人工设计特征、提取特征&#xff0c;而深度学习依赖算法自…

Redis自学之路—高级特性(实现消息队列)(七)

目录 简介 Redis的Key和Value的数据结构组织 全局哈希表 渐进式rehash 发布和订阅 操作命令 publish 发布消息 subscribe 订阅消息 psubscribe订阅频道 unsubscribe 取消订阅一个或多个频道 punsubscribe 取消订阅一个或多个模式 查询订阅情况-查看活跃的频道 查询…

高效集成:将聚水潭数据导入MySQL的实战案例

聚水潭数据集成到MySQL&#xff1a;店铺信息查询案例分享 在数据驱动的业务环境中&#xff0c;如何高效、准确地实现跨平台的数据集成是每个企业面临的重要挑战。本文将聚焦于一个具体的系统对接集成案例——将聚水潭的店铺信息查询结果集成到MySQL数据库中&#xff0c;以供BI…

LeetCode-430. 扁平化多级双向链表-题解

题目链接 430. 扁平化多级双向链表 - 力扣&#xff08;LeetCode&#xff09; 题目介绍 你将得到一个双链表&#xff0c;节点包含一个“下一个”指针、一个“前一个”指针和一个额外的“子指针”。这个子指针可能指向一个单独的双向链表&#xff0c;并且这些链表也包含类似的特殊…

arkTS:持久化储存UI状态的基本用法(PersistentStorage)

arkUI&#xff1a;持久化储存UI状态的基本用法&#xff08;PersistentStorage&#xff09; 1 主要内容说明2 例子2.1 持久化储存UI状态的基本用法&#xff08;PersistentStorage&#xff09;2.1.1 源码1的相关说明2.1.1.1 数据存储2.1.1.2 数据读取2.1.1.3 动态更新2.1.1.4 显示…

AI 助力开发新篇章:云开发 Copilot 深度体验与技术解析

本文 一、引言&#xff1a;技术浪潮中的个人视角1.1 AI 和低代码的崛起1.2 为什么选择云开发 Copilot&#xff1f; 二、云开发 Copilot 的核心功能解析2.1 自然语言驱动的低代码开发2.1.1 自然语言输入示例2.1.2 代码生成的模块化支持 2.2 实时预览与调整2.2.1 实时预览窗口功能…

AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下AI高中数学教学视频生成技术&#xff1a;利用通义千问、MathGPT、视频多模态大模型&#xff0c;语音大模型&#xff0c;将4个模型融合 &#xff0c;生成高中数学教学视频&#xff0c;并给出实施方案。本文利用专家模…

【前端Vue】day04

一、学习目标 1.组件的三大组成部分&#xff08;结构/样式/逻辑&#xff09; ​ scoped解决样式冲突/data是一个函数 2.组件通信 组件通信语法父传子子传父非父子通信&#xff08;扩展&#xff09; 3.综合案例&#xff1a;小黑记事本&#xff08;组件版&#xff09; 拆分…

嵌入式系统应用-LVGL的应用-平衡球游戏 part2

平衡球游戏 part2 4 mpu60504.1 mpu6050 介绍4.2 电路图4.3 驱动代码编写 5 游戏界面移植5.1 移植源文件5.2 添加头文件 6 参数移植6.1 4 mpu6050 4.1 mpu6050 介绍 MPU6050是一款由InvenSense公司生产的加速度计和陀螺仪传感器&#xff0c;广泛应用于消费电子、机器人等领域…