electron学习-03preload 预加载-主进程 和 渲染进程之间通信

这篇具有很好参考价值的文章主要介绍了electron学习-03preload 预加载-主进程 和 渲染进程之间通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

preload预加载

主进程是有着完全操作系统访问权限的 Node.js 环境;渲染进程默认跑在网页页面上。

渲染进程不能直接访问 Node.js 接口;主进程访不能直接访问 DOM。

预加载脚本运行在具有 HTML DOM 和 Node.js、Electron API 的有限子集访问权限的环境中

预加载脚本: 将 Electron 的不同类型的进程桥接在一起;

可访问 DOM 接口和 Node.js 环境

经常在其中使用 contextBridge 接口将特权接口暴露给渲染器

预加载会在渲染器的网页加载之前注入

主进程 和 渲染进程之间通信

网页向主进程发送消息

在预处理脚本中ipcRenderer.invoke 的函数来触发该处理程序。

在主进程中通过 ipcMain.handle 程序处理。

创建 preload.js 预加载文件
# preload.js
const { contextBridge, ipcRenderer } = require('electron')
// 能暴露的不仅仅是函数,我们还可以暴露变量
contextBridge.exposeInMainWorld('versions', {
  chrome: () => process.versions.chrome,
  ping: () => ipcRenderer.invoke('ping'),
})

给我的理解

ipcRenderer.invoke 类似于 vue 的this.$emit()

ipcMain.handle 类似于 vue 触发 this.$emit() 的处理函数

在main.js中 将脚本附在渲染进程上
# main.js
const path = require('path')
const createWindow = () => {
  const win = new BrowserWindow({
    ...,
    //将脚本附在渲染进程上
    webPreferences: { preload: path.join(__dirname, 'preload.js')},
  })
}
创建 renderer.js 文件 用于页面中的dom操作
# renderer.js
const information = document.getElementById("#info")
information.innerText = `Chrome: ${window.versions.chrome()}`
const func = async () => {
  const responent = await window.versions.ping()
  console.log('renderer-responent',responent)
}

information.addEventListener('click',func)//点击触发 预加载中的 ping 
在index.js中引入该renderer.js
# index.html
<body>
  <div id="#info"></div>
  <script src="./renderer.js"></script>
</body>
在main.js主进程中添加事件处理函数
#main
# main.js
const path = require('path')
const createWindow = () => {
  const win = new BrowserWindow({
    //将脚本附在渲染进程上
    webPreferences: { preload: path.join(__dirname, 'preload.js')},
  })
  ipcMain.handle("ping", (e, a) => { console.log('在终端打印-', a); return `控制台返回值`  })
}

预加载中的ipcRenderer.invoke 触发,main.js中的函数调用,终端打印`在终端打印- ping`,执行函数体,返回值被renderer.js中的变量 responent 接收,并且在页面的控制台打印 `控制台返回值`文章来源地址https://www.toymoban.com/news/detail-406675.html

到了这里,关于electron学习-03preload 预加载-主进程 和 渲染进程之间通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Electron实战之进程间通信

    进程间通信(IPC)并非仅限于 Electron,而是源自甚至早于 Unix 诞生的概念。尽管“进程间通信”这个术语的确创造于何时并不清楚,但将数据传递给另一个程序或进程的理念可以追溯至 1964 年,当时 Douglas McIlroy 在 Unix 的第三版(1973 年)中描述了 Unix 管道的概念。 例如,我

    2024年02月22日
    浏览(33)
  • Electron 进程间通信的实现

    在 Electron 中,可以使用多种方式实现进程间通信(IPC,Inter-Process Communication),以下是几种常见的实现方式: 使用 Electron 提供的 ipcMain 和 ipcRenderer 模块进行通信。主进程使用 ipcMain 模块监听事件,渲染进程使用 ipcRenderer 模块发送事件。 示例: 主进程: 渲染进程: 使用

    2024年02月10日
    浏览(75)
  • Vite + Vue3 + Electron实现进程通信

    Electron 是一个基于 Chromium 和 Node.js 的桌面应用程序开发框架,而 Vue3 则是一种流行的前端框架。将两者结合使用可以快速地打造出跨平台的桌面应用程序。在这种组合中,Electron 提供了强大的桌面应用开发能力,而 Vue3 则提供了易用的 UI 组件和开发体验 Electron 内置了 Chrom

    2024年02月12日
    浏览(44)
  • Electron打包的桌面应用程序,运行中程序黑屏、白屏等渲染进程崩溃问题解决

    使用 Electron 打包 web 项目为桌面应用程序,由于运行环境的硬件条件或其他一些原因,导致程序运行过程中黑屏、白屏、崩溃。 2.1 依赖版本: electron : v8.2.1 electron-log : v4.1.1 electron-packager : v14.2.1 2.2 运行环境 win7 x86 2.3 分析过程 2.3.1 排除 程序本身运行不会“白屏”,但运行

    2024年02月07日
    浏览(52)
  • 使用vue3+vite+elctron构建小项目介绍Electron进程间通信

    进程间通信 (IPC) 是在 Electron 中构建功能丰富的桌面应用程序的关键部分之一。 由于主进程和渲染器进程在 Electron 的进程模型具有不同的职责,因此 IPC 是执行许多常见任务的唯一方法,例如从 UI 调用原生 API 或从原生菜单触发 Web 内容的更改。 在 Electron 中,进程使用 ipcM

    2024年02月06日
    浏览(56)
  • 视频预加载(preload)实现

    如果网页中只有一个视频文件,您可能会使用 video 标签的 preload 属性来提示浏览器预加载的信息或内容量。但这意味着 Media Source Extensions(MSE)与 preload 将不兼容。 资源的获取将仅在HTML文档初始加载和解析完成后启动(例如, DOMContentLoaded 事件的触发),而 window.onload 事件

    2024年02月03日
    浏览(32)
  • Golang Gorm 一对多查询 preload预加载

     GORM允许使用  Preload 通过多个SQL中来直接加载关系, 例如: 其实很简单, 你要preload  user表 的数据,gorm就提前把这张表全部取出来,然后再执行 First 或 Find 这样的方法去查询主数据,最后把两种数据通过外键关联一一对应起来。 其实preload也就是做了两次查询。    有了

    2024年02月11日
    浏览(38)
  • webpack配置preload和prefetch预加载技术

    我们前面已经做了代码分割,同时会使用 import 动态导入语法来进行代码按需加载(我们也叫 懒加载 ,比如路由懒加载就是这样实现的)。 但是加载速度还不够好,比如:是用户 点击按钮时 才加载这个资源的, 如果资源体积很大,那么用户会感觉到明显卡顿效果 。 要优化

    2024年02月09日
    浏览(47)
  • Android Glide preload RecyclerView切入后台不可见再切换可见只加载当前视野可见区域item图片,Kotlin

    build.gradle文件: 如果手机图片很多,假设已经将全部图片装入宫格的列表,在快速上下滑动过程中,由于glide会累积每一个图片的加载任务,如果图片比较大,上下滑动时间又很长,那么累积任务会很严重,导致异常发生,实现在RecyclerView切入后台(或不可见)时候,然后再

    2024年02月10日
    浏览(48)
  • (学习笔记-进程管理)进程间有哪些通信方式?

    每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间时每个进程都共享的,所以进程之间要通信必须通过内核   在Linux命令中 [ | ]  这个竖线就是一个 管道 。 它的功能是讲前一个命令(ps auxf)的输出,作为后一个命令(grep mysql)的输入,从这功

    2024年02月13日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包