Electron

Electron

.npmrc

安装electron依赖经常会不成功
在项目目录下创建.npmrc文件,设置镜像地址
npm config set strict-ssl false

registry=https://registry.npmmirror.com
electron-mirror=https://registry.npmmirror.com/mirrors/electron/

热更新/热加载

方案一

  1. 安装:npm install electron-reloader --save-dev

  2. 在主进程 js 文件

    try {
      require("electron-reloader")(module);
    } catch (_) {}
    
  3. 重启

方案二

  1. 安装:npm i nodemon --D
  2. 修改scripts"start": "nodemon --watch index.js --exec electron ."
  3. 再次运行npm run start,仅当index.js内容变化时,就会自动重新执行electron .来重启应用

菜单栏与边框

app.on("ready", () => {
  mainWindow = new BrowserWindow({
    // 窗口位置
    x: 0,
    y: 0,
    //设置窗口宽高
    width: 400,
    height: 600,
    frame: false, // 无边框页面(同时菜单栏也不会显示,只是不会显示,可以通过快捷键操作)
  });
  mainWindow.removeMenu(); //去掉菜单栏
  mainWindow.loadFile("./src/main.html");
});

默认情况下,无边框窗口是不可拖拽的,可以通过设置

  1. -webkit-app-region: drag来告诉Electron哪些区域是可拖拽的
  2. -webkit-app-region: no-drag;来告诉Electron哪些区域是不可拖拽的
html,body {
  height: 100%;
  width: 100%;
}

body{
  -webkit-app-region: drag;
}

.enable-click {
  -webkit-app-region: no-drag;
}

系统托盘

程序启动时,将应用程序加入系统托盘。在 Electron 中,借助 Tray 模块实现。

//app 模块,控制整个应用程序的事件生命周期。
//BrowserWindow 模块,它创建和管理程序的窗口。
const { app, BrowserWindow, Tray, Menu } = require("electron");
const path = require("path");

const iconPath = path.join(__dirname, "./src/img/logo.png"); //应用运行时的标题栏图标

let mainWindow, tray;

//在 Electron 中,只有在 app 模块的 ready 事件被激发后才能创建浏览器窗口
app.on("ready", () => {
  mainWindow = new BrowserWindow({
    // frame: false, // 无边框页面
    resizable: false, //不允许用户改变窗口大小
    width: 800, //设置窗口宽高
    height: 600,
    icon: iconPath, //应用运行时的标题栏图标
    webPreferences: {
      backgroundThrottling: false, //设置应用在后台正常运行
      nodeIntegration: true, //设置能在页面使用nodejs的API
      contextIsolation: false,
      preload: path.join(__dirname, "./preload.js"),
    },
  });
  mainWindow.removeMenu(); //去掉菜单栏(菜单栏的快捷键)
  //   mainWindow.loadURL(`file://${__dirname}/src/main.html`);
  mainWindow.loadFile("./src/main.html");
  //   系统托盘
  tray = new Tray(iconPath); //实例化一个tray对象,构造函数的唯一参数是需要在托盘中显示的图标url
  tray.setToolTip("Tasky"); //鼠标移到托盘中应用程序的图标上时,显示的文本
  tray.on("click", () => {
    //点击图标的响应事件,这里是切换主窗口的显示和隐藏
    if (mainWindow.isVisible()) {
      mainWindow.hide();
    } else {
      mainWindow.show();
    }
  });
  tray.on("right-click", () => {
    //右键点击图标时,出现的菜单,通过Menu.buildFromTemplate定制,这里只包含退出程序的选项。
    const menuConfig = Menu.buildFromTemplate([
      {
        label: "Quit",
        click: () => app.quit(),
      },
      {
        label: "Next Step",
        click: () => app.quit(),
      },
    ]);
    tray.popUpContextMenu(menuConfig);
  });
});

IPC 通信

以隐藏窗口为例

渲染进程 TO 主进程

// 页面文件
const { ipcRenderer } = require("electron");
ipcRenderer.send("mainWindow:close");
// index.js
const { ipcMain } = require("electron");
ipcMain.on("mainWindow:close", () => {
  mainWindow.hide();
});

主进程 TO 渲染进程

窗口置顶

mainWindow.setAlwaysOnTop(true); // 置顶

关闭窗口

// 提醒窗口会在一段时间后关闭,可以通过remindWindow.close()来关闭窗口。
// 当窗口关闭后,我们可以设置remindWindow = null来回收分配给该渲染进程的资源。
mainWindow.on("closed", () => {
  mainWindow = null;
});
mainWindow.close();

访问后页面注入脚本


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

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

相关文章

Dragonfly Topology 蜻蜓网络拓扑

蜻蜓拓扑 Dragonfly Topology 1. 拓扑参数2. Topology Description 拓扑描述3. Topology Variations 拓扑变体 蜻蜓拓扑 Dragonfly Topology 1. 拓扑参数 Dragonfly拓扑参数: N N N: 网络中终端(terminal)的总数量 p p p: 连接到每个路由器的终端数量 a a a: 每…

类加载子系统

一.类加载子系统的作用 类加载子系统(Class Loading Subsystem)是Java虚拟机的一个重要组成部分,它将Class文件加载到内存中。不同语言程序可以使用编译器生成符合JVM规范的Class文件,Class文件要求在文件开头有特定的文件标识。…

湖仓一体(Lakehouse)架构的核心组件之存储层——Lakehouse 架构(三)

文章目录 前言Lakehouse 存储关键概念行存储与列存储基于存储的查询性能优化 Lakehouse 存储组件云储存文件格式Apache ParquetApache ORCApache Avro相似点和差异点 表格格式Apache HiveIceberg特性和优点 Apache Hudi特性和优点 Delta Lake特性和优点 相似点和差异点 总结 前…

李沐51_序列数据——自学笔记

1.时序模型中,当前数据跟之前观察到的数据相关 2.自回归模型使用自身过去数据来预测未来 3马尔可夫模型假设当前只跟最近少数数据相关,从而简化模型 4.潜变量模型使用潜变量来概括历史信息 生成一些数据:使用正弦函数和一些可加性噪声来生…

【OpenGL开发】PyQt在关闭应用程序时没有运行析构函数的问题

PyQt在关闭应用程序时没有运行析构函数的问题 目录 一、说明二、python的析构函数三、通用版QT5 存在一些问题四、python版PyQt5 存在一些问题五、OpenGL的析构问题5.1 OpenGL很脆弱,这不是危言耸听5.2 以上OpenGL问题解决方法六、一些保留意见一、说明 应用QT做程序界面,在…

工业自动化的未来:UWB模块驱动下的生产优化

随着工业自动化技术的不断发展,UWB技术正在成为工业生产优化的关键驱动力之一。UWB模块作为UWB技术的核心组成部分,具有精准定位、抗干扰、快速响应等特点,为工业自动化提供了新的解决方案和发展机遇。本文将探讨UWB模块驱动下的工业生产优化…

ug钣金展开图教程

UG钣金件如何展平,ug钣金展开步骤?一起来探讨。 第一步:准备一个钣金零件图档(如下图)我们需要进入UG开始-所以应用模块-钣金-NX钣金。 要把这个零件转化为钣金零件,这样才可以进行下一步骤展开。选择转化为钣金,在基本面选择任意一个零件表…

Mysql基础知识学习总结

文章目录 一.数据库的相关概念二.关系模型的核心概念三.SQL分类四.SQL语句注释命令行连接Mysql客户端desc基本用法输出解释示例 show基本用法显示数据库列表显示当前数据库中的表显示表的列信息显示表的索引信息显示服务器状态和系统变量显示创建表的SQL语句显示当前的权限 sel…

遇事不决 量子力学?

文章目录 引入量子力学产生的必然性量子力学名称的由来粒子?波?波粒二象性测不准原理 (不确定原理)叠加态原理 量子纠缠态叠加量子纠缠量子纠缠实验 逻辑判断,量子力学到底完善吗观测量子纠缠?那我们宏观世…

idea中停止运行Vue

在里面敲入Ctrlc 输入y确定即可。

音频调试(2)

前言: 大家好,今天继续分享记录一下最近的音频调试心得!同时这个过程中,也有朋友过来交流音频的问题,通过交流,也是学习到了新东西! 视频和音频复合推流: 在上一篇文章里面有提到fdk…

如何批量在文件名前加序号?文件增加序号前缀的方法 四个方法推荐给你

在日常工作和生活中,我们经常需要处理大量的文件,为了方便管理和查找,给文件增加序号前缀是一种常见的做法。下面将介绍几种给文件增加序号前缀的方法,帮助您更高效地整理文件。 方法一,使用【汇帮批量重命名】添加序…

on display 与on show的区别 展示 Show也用来表达电视节目。”秀” 就是Show的音译。

on show 表演,秀,吸引别人过来看 The most wonderful piece of machinery on show was Nasmyth’s steam hammer. on display 只展示, 有可能他人不会注意 Many colorful clothes are displayed in the showcase. 展示柜里摆放着很多鲜艳…

ASV1000视频监控中心录像服务器,实现存满天数,自动覆盖

目录 一、需求 二、需求分析 (一)录像存满自动覆盖的定义 (二)录像存满指定的天数自动覆盖 三、录像存满天数后自动覆盖在AS-V1000的实现 (一)要考虑的问题 1、确定存储需求 2、设置录像计划 3、配…

ts封装axios遇到的问题

在使用ts封装axios时,这里总是有一个报错,经过一顿搜索,发现错误原因:在TypeScript中,函数的参数类型和返回类型是不等价的,因此导致类型不匹配。 解决方法:将 AxiosRequestConfig 改成 Interna…

2024年第二届“天洑杯”数据建模大赛赛题答疑

“天洑杯”数据建模大赛旨在促进数据分析建模技术的推广和发展,培养一批具有用数据思维解决复杂问题能力的优秀人才,推动高水平人工智能交叉学科人才队伍建设。大赛鼓励参赛选手立足于自身的专业背景和工程实践技能,结合数据科学与人工智能相…

vscode运行 .md文件

1、安装插件 markdown-preview-enhancedmarkdown-all-in-oneMarkdown Preview Mermaid Support paste image LimfxCodeEx Code Spell checker 2、项目文件导入即可 本文为学习笔记,所参考文章均已附上链接,若有疑问请私信! 创作不易&#x…

LeetCode-热题100:114. 二叉树展开为链表

题目描述 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例…

原子的内部结构

原子非常神奇,花时间思考它是非常有价值的。尽管传统的太阳系示意图存在致命的缺点,但我们还是可以局部应用于原子。 首先,原子与太阳系具有相似性一原子的中心质量大,外部质量小。我们用最简单的氢原子做分析,氢原子…

【动态规划 区间dp 位运算】3117. 划分数组得到最小的值之和

本文涉及知识点 动态规划 区间dp 位运算 LeetCode3117. 划分数组得到最小的值之和 给你两个数组 nums 和 andValues,长度分别为 n 和 m。 数组的 值 等于该数组的 最后一个 元素。 你需要将 nums 划分为 m 个 不相交的连续 子数组,对于第 ith 个子数组…
最新文章