【Electron学习笔记(二)】基于Electron开发应用程序

ops/2024/11/27 9:24:53/

基于Electron开发本地应用程序

    • 基于Electron开发本地应用程序
    • 前言
    • 正文
    • 1、创建 pages 目录
    • 2、创建 index.html 文件
    • 3 、创建 html.css 文件
    • 4 、main.js里引入页面
    • 5 、运行 start 命令
    • 6 、启用开发者模式
    • 7 、解决内容安全策略
    • 8、完善窗口行为
    • 9、配置自动重启,保存后自动热更新完善窗口行为

基于Electron开发本地应用程序

前言

本文旨在帮助初学者快速上手Electron,通过一步步的示例操作,展示如何从头开始创建一个简单的本地应用程序。我们将从项目的基本结构搭建开始,包括创建HTML、CSS和JavaScript文件,到配置Electron主进程以加载这些资源。此外,我们还将探讨如何启用开发者模式以便于调试,如何解决内容安全策略(CSP)可能带来的问题,以及如何完善窗口行为,使其更加符合用户的期望。
更进一步,为了提升开发效率,我们将配置项目以实现自动重启和热更新功能。这意味着在开发过程中,每当代码保存后,应用程序将自动重新加载,无需手动重启应用,从而大大加快了迭代速度。

正文

1、创建 pages 目录

在这里插入图片描述

2、创建 index.html 文件

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>index页面</title><link rel="stylesheet" href="./html.css"></head><body><h1>欢迎学习Electron开发</h1></body>
</html>

在这里插入图片描述

3 、创建 html.css 文件

javascript">h1 {background-color: gray;color: orange;
}

在这里插入图片描述

4 、main.js里引入页面

javascript">const {app,BrowserWindow}=require("electron") app.on("ready",()=>{const win = new BrowserWindow({width:800,height:600,autoHideMenuBar:true})//引入页面win.loadFile("./pages/index/index.html")
})

5 、运行 start 命令

在终端输入:npm start
在这里插入图片描述
在这里插入图片描述

6 、启用开发者模式

Ctrl + Shift + I 启用开发者模式
在这里插入图片描述

切换控制台 Console,会发现有一个警告:
在这里插入图片描述
这是因为有内容安全策略警告,就是配置在网页中能加载哪些资源。

7 、解决内容安全策略

可以参考 内容安全策略(CSP)
在 index.html 中加入:

        <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>index页面</title><link rel="stylesheet" href="./html.css"><meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'"></head><body><h1>欢迎学习Electron开发</h1></body>
</html>

再次运行后,不会有警告出现:
在这里插入图片描述

8、完善窗口行为

对于 Windows 和 macOS 系统在处理一些操作时是有差异存在的

  1. Windows 和 Linux 平台窗口特点:应用所有窗口都关闭,那么应用自动退出
  2. macOS 平台窗口特点:即使在没有打开任何窗口的情况下也可以继续运行,并且在没有窗口可用的情况下激活应用时会打开新的窗口

执行代码可以参考官方文档:管理窗口的生命周期

依据代码改写 main.js:

javascript">const {app,BrowserWindow}=require("electron") function createWindow(){const win = new BrowserWindow({width:800,height:600,autoHideMenuBar:true})//引入页面win.loadFile("./pages/index/index.html")
}
// 当app准备好后,执行createWindow创建窗口
app.on("ready",()=>{createWindow()// 当应用被激活时app.on('activate', () => {// 如果当前应用没有窗口,则创建一个新的窗口if (BrowserWindow.getAllWindows().length === 0) createWindow()})
})
// 当所有窗口都关闭时
app.on('window-all-closed', () => {// 如果所处平台不是mac(darwin),则退出应用if (process.platform !== 'darwin') app.quit()})

9、配置自动重启,保存后自动热更新完善窗口行为

javascript">npm i nodemon -D

在这里插入图片描述
package.json 里重写 start 命令

javascript"> "start": "nodemon --exec electron ."

配置 nodemon.json 规则

javascript">{"ignore":["node modules","dist"],"restartable":"r","watch":["*.*"],"ext":"html,js,css"
}

配置好以后,当代码修改后保存,应用会自动重启
在这里插入图片描述


http://www.ppmy.cn/ops/137044.html

相关文章

vue3+ts 我写了一个跟swagger.yml生成请求和响应实体(接口)

一、下载地址 swagger-to-ts: 使用python编写的一个根据swagger.yml生成vue3或ts的接口&#xff08;interface&#xff09;和类&#xff08;class&#xff09; - Gitee.com 进入下面页面&#xff0c;将这两个文件一起下载 二、配置 打开 config.toml 文件&#xff0c;修改ip为…

网络层协议IP

对于网络层我们直接通过IP协议来了解其内容 一.IP协议 首先我们先来了解几个概念&#xff1a; 主机&#xff1a;配有IP地址&#xff0c;但是不进行路由控制的设备 路由器&#xff1a;配有IP地址&#xff0c;同时进行路由控制的设备 节点&#xff1a;主机和路由器的统称 所以现在…

uni-app运行 安卓模拟器 MuMu模拟器

最近公司开发移动端系统&#xff0c;使用真机时每次调试的时候换来换去的麻烦&#xff0c;所以使用模拟器来调试方便。记录一下安装和连接的过程 一、安装MuMu模拟器 百度搜索MuMu模拟器并打开官网或者点这里MuMu模拟器官网 点击下载模拟器 安装模拟器&#xff0c;如果系统…

Oracle RMAN异机迁移恢复

Oracle RMAN异机迁移恢复 介绍 RMAN备份异机恢复几点说明&#xff1a; &#xff08;1&#xff09;RMAN异机恢复的时候&#xff0c;db name必须相同。 &#xff08;2&#xff09;如果恢复的路径和源库不一致&#xff0c;就需要在restorel时用set命令指定新位置。 准备异机恢…

PyTorch2

Tensor的常见操作&#xff1a; 获取元素值&#xff1a; 注意&#xff1a; 和Tensor的维度没有关系&#xff0c;都可以取出来&#xff01; 如果有多个元素则报错&#xff1b; import torch def test002():data torch.tensor([18])print(data.item())pass if __name__ &qu…

数字图像处理(6):除法运算、除法器

&#xff08;1&#xff09;当除数是常数时&#xff0c;可以先转化为乘法&#xff0c;再右移&#xff0c;乘法的N越大&#xff0c;计算误差越小。 如&#xff1a;计算x/122&#xff0c;可以看成&#xff08;x * 67&#xff09;>>13,N13,使用verilog实现&#xff1a; reg …

Docker部署mysql:8.0.31+dbsyncer

Docker部署mysql8.0.31 创建本地mysql配置文件 mkdir -p /opt/mysql/log mkdir -p /opt/mysql/data mkdir -p /opt/mysql/conf cd /opt/mysql/conf touch my.config [mysql] #设置mysql客户端默认字符集 default-character-setUTF8MB4 [mysqld] #设置3306端口 port33…

【贪心算法第五弹——300.最长递增子序列】

目录 1.题目解析 题目来源 测试用例 2.算法原理 3.实战代码 代码解析 注意本题还有一种动态规划的解决方法&#xff0c;贪心的方法就是从动态规划的方法总结而来&#xff0c;各位可以移步博主的另一篇博客先了解一下&#xff1a;动态规划-子序列问题——300.长递增子序列…