初识Electron,创建桌面应用

历史小剧场

呜呼!古有匈奴犯汉,晋室不纲,铁木夺宋,虏清入关,神舟陆沉二百年有余,中国之见灭于满清初非满人能灭之,能有之也因有汉奸以作虎怅,残同胞媚异种,始有吴三桂洪承畴,继有曾国藩袁世凯以为厉。今率堂堂之师,征讨汉贼袁氏筑共和之体,或免于我子子孙孙被异族奴役。---- 《讨汉贼袁世凯檄文》

基本使用

1、初始项目

注意:main: 改为 main.js

npm init
2、安装electron
npm install --save-dev electron
3、修改package.json
{"name": "electron-app-cycle","version": "1.0.0","description": "","main": "main.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1","start": "nodemon --watch main.js --exec npm run build","build": "electron ."},"author": "","license": "ISC","devDependencies": {"electron": "^30.0.1"}
}
4、编写main.js
const { app, BrowserWindow, ipcMain } = require('electron')// 创建窗口
let mainWin = null;
function createWindow() {mainWin = new BrowserWindow({x: 100,y: 100,show: false,width: 1000,height: 600,maxWidth: 1000,maxHeight: 800,minWidth: 400,minHeight: 200,resizable: false, // 可缩放movable: true, // 可移动frame: true, // 无边框title: "Electron 学习",icon: "logo.png",// transparent: true, // 透明autoHideMenuBar: true, // 隐藏菜单栏webPreferences: {nodeIntegration: true, // 集成 NodejscontextIsolation: false, // 隔离上下文}})mainWin.loadFile('index.html')mainWin.on("ready-to-show", () => {mainWin.show()})mainWin.webContents.on('dom-ready', () => {console.log("22222 ---> dom-ready")})mainWin.webContents.on('did-finish-load', () => {console.log("33333 ---> did-finish-load")})// 当前窗口关闭时触发mainWin.on("closed", () => {console.log("88888 ---> this window is closed")mainWin = null;})
}// 监听来自渲染进程的 openListWindow 事件
ipcMain.on("openListWindow", () => {const chidlWin = new BrowserWindow({x: 400,y: 300,width: 400,height: 200,parent: mainWin,webPreferences: {nodeIntegration: true,}})chidlWin.loadFile('list.html')chidlWin.on("closed", () => {chidlWin = null})
})app.on('ready', () => {console.log("11111 ---> app is ready")createWindow()
})app.on('window-all-closed', () => {console.log("44444 ---> all windows are closed")app.quit()
})app.on('before-quit', () => {console.log("55555 ---> before-quit")
})app.on('will-quit', () => {console.log("66666 ---> will-quit")
})app.on('quit', () => {console.log("77777 ---> quit")
})

补充知识:Electron 生命周期

  • ready: app 初始化完成
  • dom-ready: 一个窗口中的文本加载完成
  • did-finish-load: 导航完成时触发
  • window-all-closed: 所有窗口都被关闭时触发
  • before-quit: 在关闭窗口之前触发
  • will-quit: 在窗口关闭并且应用退出时触发
  • quit: 当所有窗口被关闭时触发
  • closed: 当窗口关闭时触发,此时应删除窗口引用
5、编写主窗口页面 index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title></title>
</head>
<body><h2>Electron生命周期</h2><button id="open-list-window">点击打开新窗口</button><script src="index.js"></script>
</body>
</html>

index.js

const { ipcRenderer } = require('electron')window.addEventListener("DOMContentLoaded", () => {const btn = document.getElementById("open-list-window");btn.onclick = () => {// 当按钮被点击时,发送消息到主进程ipcRenderer.send('openListWindow')}
})

补充知识
- DOMContentLoaded事件:此时浏览器已经完全加载了HTML文件,并且DOM树已经生成好了。但是其他外部资源,比如样式文件、图片、字体等并没有加载好;
- Load事件:此时浏览器已经将所有的资源都加载完毕,可以正确读取页面中的资源。

6、编写子窗口 list.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>新窗口</title>
</head>
<body><div>新窗口</div>
</body>
</html>

运行

npm run start

Electron案例

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中职数字化校园网络建设

中职&#xff08;职校&#xff09;数字化校园的校园网建设立足于职业教育、职业学校的特点&#xff0c;充分注意到信息技术的飞速发展、通信成本的迅速降低的特点。在规划和建设校园网时&#xff0c;遵循以下原则&#xff1a; 采用通用和成熟的技术&#xff1a;采用通用的、成熟…

Android面试题(持续更新中)

一、抽象类与接口的区别&#xff1f; 1、抽象类可以提供成员方法的实现细节&#xff0c;而接口中只能存在 public 抽象方法&#xff1b; 2、抽象类中的成员变量可以是各种类型的&#xff0c;而接口中的成员变量只能是 public static final 类型的&#xff1b; 3、接口中不能含有…

【国产NI替代】NI-9235 10 kS/s/ch,120 Ω四分之一桥应变计,8通道C系列应变/桥输入模块

10 kS/s/ch&#xff0c;120 Ω四分之一桥应变计&#xff0c;8通道C系列应变/桥输入模块 NI‑9235可同步测量所有通道的动态应变&#xff0c;从而实现了高速同步测量。 该功能对于需要在特定时刻对多个通道进行比较的应用&#xff08;例如冲击测试&#xff09;非常重要。\n\nNI…

Windows Server 2019/2022 开启

我的环境是Windows Serve 2022 Datacenter, 21H2, 需要使用Hyper-V 与 VMWare Workstation共存&#xff0c;但是在服务器管理器中找不到Windows Hypervisor Platform安装选项。在Win10中是启动关闭Windows功能中&#xff0c;而server中找不到。 解决方法&#xff1a; 以管理员…

算法入门ABC

前言 初学算法时真的觉得这东西晦涩难懂&#xff0c;貌似毫无用处&#xff01;后来的后来&#xff0c;终于渐渐明白搞懂算法背后的核心思想&#xff0c;能让你写出更加优雅的代码。就像一首歌唱的那样&#xff1a;后来&#xff0c;我总算学会了如何去爱&#xff0c;可惜你早已远…

【漏洞复现】若依druid 未授权访问漏洞

0x01 产品简介 若依&#xff08;Ruoyi&#xff09;框架是一款基于Spring Boot、Spring Cloud、OAuth2与JWT鉴权等核心技术的快速开发平台。它支持多种安全框架和持久化框架&#xff0c;并采用前后端分离的模式进行开发&#xff0c;具备高度的灵活性和可扩展性。若依框架提供了…

C语言指针和数组的一些笔试题

文章目录 前言一、一维数组二、字符数组-1三、字符数组-2总结 前言 C语言指针和数组的一些笔试题 一、一维数组 #include <stdio.h> int main() {int a[] { 1,2,3,4 };printf("%d\n", sizeof(a));printf("%d\n", sizeof(a 0));printf("%d\n…

经典网络解读——Efficientnet

论文&#xff1a;EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks&#xff08;2019.5&#xff09; 作者&#xff1a;Mingxing Tan, Quoc V. Le 链接&#xff1a;https://arxiv.org/abs/1905.11946 代码&#xff1a;https://github.com/tensorflow/t…

【笔试训练】day15

1.平方数 水题直接看代码 代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include<math.h> #include<algorithm> using namespace std; typedef long long ll; int main() {ll x;cin >> x;ll a sqrt(x);if (abs(a * a -…

git 配置相关

问题一&#xff1a;ssh-keygen -t ed25519 -C "Gitee SSH Key" 这个命令中的 ed25519 字符是什么意思&#xff1f; ssh-keygen 是一个用于生成SSH密钥的工具&#xff0c;SSH&#xff08;Secure Shell&#xff09;是一种网络协议&#xff0c;用于加密方式远程登录和其…

Laravel11 路由

基本路由 use Illuminate\Support\Facades\Route;Route::get(/greeting, function () {return Hello World; }); 项目初始自带分组&#xff0c;routes文件夹里有api、auth、console、web四个文件。 api项目是php artisan install:api&#xff0c;routes里没有api.php可以执行…

2024抖音AI图文带货班:在这个赛道上 乘风破浪 拿到好效果

课程目录 1-1.1 AI图文学习指南 1.mp4 2-1.2 图文带货的新机会 1.mp4 3-1.3 2024年优质图文新标准 1.mp4 4-1.4 图文如何避免违规 1.mp4 5-1.5 优质图文模板解析 1.mp4 6-2.1 老号重启 快速破局 1.mp4 7-2.2 新号起号 不走弯路 1.mp4 8-2.3 找准对标 弯道超车 1.mp4 9…

JMeter 请求头信息配置详解

在进行 Web 测试和 API 测试时&#xff0c;正确配置 HTTP 请求头是关键步骤之一&#xff0c;尤其当使用诸如 JMeter 这样的强大工具时。在本文中&#xff0c;我将详细介绍如何在 JMeter 中有效地配置和管理HTTP请求头。 在 JMeter 中添加和配置 HTTP 请求头 步骤 1: 打开 HTT…

Sy8网络管理命令(ubuntu23.10和centos8)

前言、 本次实验主要是扩展学习&#xff0c;不仅限在课本的内容。毕竟课本的内容太过于陈旧了。需要的童鞋看看。 说明&#xff1a;&#xff08;书本中sy9”第3.实验内容“大家还是要做下。&#xff09; 1、使用ubuntu做实验的童鞋只要看第二、三、四、七章节的部分内容。 2、使…

文件分块+断点续传 实现大文件上传全栈解决方案(前端+nodejs)

1. 文件分块 将大文件切分成较小的片段&#xff08;通常称为分片或块&#xff09;&#xff0c;然后逐个上传这些分片。这种方法可以提高上传的稳定性&#xff0c;因为如果某个分片上传失败&#xff0c;只需要重新上传该分片而不需要重新上传整个文件。同时&#xff0c;分片上传…

21.哀家要长脑子了!

1.21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 我做过啊&#xff0c;为什么还是不能独立做出来&#xff0c;为什么为什么啊啊啊 嘻嘻奔向五一 是这样的&#xff1a; 要按升序连接&#xff0c;以链表2头结点作为开端&#xff0c;哪个小就先连接哪个&#xff…

CarEye 智能叉车管理系统

CarEye 团队在智能车辆管理平台基础上&#xff0c;专门针对叉车管理特殊性开发了叉车管理系统。以下是叉车管理系统的一些主要介绍&#xff1a;

ONVIF协议,DVR和NVR的区别

&#xff0e; 为什么要用ONVIF协议&#xff1a; 一.IPC厂商主流的遵循的是RTSP协议进行推流&#xff0c;那么RTSP最重要的就是RTSP的URL地址。但是各个厂商的URL地址格式都不一样&#xff0c;所以就诞生了一个标注协议—ONVIF。ONVIF协议的出现&#xff0c;解决了不同厂商之间…

【数据分析面试】35.20个机器学习问答题

在数据分析领域&#xff0c;机器学习是一个至关重要的技术&#xff0c;它可以帮助分析师从数据中发现模式、预测趋势和做出推断。机器学习模型可以自动学习并改进其性能&#xff0c;从而为业务决策提供有力支持。在面试中&#xff0c;了解面试者对机器学习的理解和应用能力是至…

使用 ArcGIS 对洪水预测进行建模

第一步 — 下载数据 所有数据均已包含在 Esri 提供的项目压缩文件中。我将创建一个名为“Stowe_Hydrology.gdb”的新地理数据库,在其中保存这些数据以及创建的所有后续图层。 1-0。斯托市边界 斯托城市边界是佛蒙特州地理信息中心提供的矢量要素类面。我将这一层称为“Stow…