electron笔记:electron更新版本

一.electron版本由13.6.9更新至22.3.27

之前因为remote的原因,electron版本停留在13.6.9,14.x后需要单独处理remote,此次需要Chrome 95以上部分功能,所以需要升级版本到16.x以上,因为本机nodejs版本为16.9.1,不想将nodejs升级到17以上,所以将版本升级到22.x

二.升级变更

1.版本变更

13.6.9改为22.3.27,安装"@electron/remote": "^2.1.2",还可以将electron-builder版本升级至"electron-builder": "^23.6.0",

2.electron/remote相关

首先需要主程序index.js中在创建窗体new BrowserWindow()后,添加如下

    require('@electron/remote/main').initialize()require('@electron/remote/main').enable(mainWindow.webContents)

变更前获取窗体信息:

    const {BrowserWindow,remote,ipcRenderer} = require('electron')this.win=remote.getCurrentWindow()

变更后

const {screen,getCurrentWindow } = require('@electron/remote')
let win=getCurrentWindow()

变更前获取屏幕尺寸

const { remote } = require('electron')
const screen = remote.screen;
this.width= screen.getPrimaryDisplay().workAreaSize.width;
this.height= screen.getPrimaryDisplay().workAreaSize.height;

变更后

const {screen,getCurrentWindow } = require('@electron/remote')
this.width= screen.getPrimaryDisplay().workAreaSize.width
this.height= screen.getPrimaryDisplay().workAreaSize.height

 变更前获取app信息

const { app } = require("electron").remote
//使用
let homeDir =  path.dirname(app.getPath('exe'))

变更后

const { app } = require('@electron/remote')
let homeDir =  path.dirname(app.getPath('exe'))

 3.打开子窗体

升级前打开子窗体

const electron = require('electron') 
createBrowserWindow(options){const BrowserWindow = electron.remote.BrowserWindow;let remoteWin=nulllet params={webPreferences: {webSecurity: false,nodeIntegration: true,webviewTag: true,contextIsolation: false,enableRemoteModule:true},useContentSize: true,movable:true,//是否可移动transparent: true,resizable: true,frame:true,//是否显示边缘框skipTaskbar: false,//展示任务栏titleBarStyle: "hidden",fullscreen:false,//是否全屏显示backgroundColor: '#fff',center:true,alwaysOnTop:true,//永远在别的应用上层}params.fullscreen=options.fullscreenif(options.width){params.fullscreen=falseparams.width=options.width}if(options.height){params.fullscreen=falseparams.height=options.height}if(options.x){params.x=options.x}if(options.y){params.width=options.y}if(options.backgroundColor){params.backgroundColor=options.backgroundColor}params.name=new Date().getTime()remoteWin=new BrowserWindow(params)return remoteWin},openUrl(view,url){if(process.env.NODE_ENV === 'production'){view.loadFile('dist/electron/index.html',{hash:url})}else{let toUrl=window.location.protocol+"//"+window.location.host+"/#/"+urlview.webContents.openDevTools();view.loadURL(toUrl)}},//使用
this.fileView=browserWindowUtil.createBrowserWindow()
browserWindowUtil.openUrl(this.fileView,'fileManage/fileApply?type=dir')

升级后

需要使用ipcMain,ipcRenderer通信在主程序中创建子窗体

主程序

import {app, BrowserWindow, ipcMain} from 'electron'
ipcMain.on('childWin',(e,message)=>{let view=browserWindowUtil.createBrowserWindow(message)browserWindowUtil.openUrl(view,message.url)
})//工具方法
import {BrowserWindow, ipcRenderer} from 'electron'createBrowserWindow(options){let remoteWin=nulllet params={webPreferences: {webSecurity: false,nodeIntegration: true,webviewTag: true,contextIsolation: false,enableRemoteModule:true},useContentSize: true,movable:true,//是否可移动transparent: true,resizable: true,frame:true,//是否显示边缘框skipTaskbar: false,//展示任务栏titleBarStyle: "hidden",fullscreen:false,//是否全屏显示backgroundColor: '#fff',center:true,alwaysOnTop:true,//永远在别的应用上层}params.fullscreen=options.fullscreenif(options.width){params.fullscreen=falseparams.width=options.width}if(options.height){params.fullscreen=falseparams.height=options.height}if(options.x){params.x=options.x}if(options.y){params.width=options.y}if(options.backgroundColor){params.backgroundColor=options.backgroundColor}params.name=new Date().getTime()remoteWin=new BrowserWindow(params)require('@electron/remote/main').enable(remoteWin.webContents)return remoteWin},openUrl(view,url){if(process.env.NODE_ENV === 'production'){view.loadFile('dist/electron/index.html',{hash:url})}else{//此处升级后不能识别上述window.location等let toUrl='http://localhost:9080'+"/#/"+urlview.webContents.openDevTools();view.loadURL(toUrl)}},

渲染页面

import {BrowserWindow, ipcRenderer} from 'electron'    
sendMsg(channel,value){ipcRenderer.send(channel,value);
}

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

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

相关文章

【深度学习基础】深度学习的关键概念和网络结构

深度学习基础:深度学习的关键概念和网络结构 目录 引言深度学习的关键概念 神经网络激活函数损失函数优化算法 深度学习的网络结构 前馈神经网络(FNN)卷积神经网络(CNN)循环神经网络(RNN)生成…

【java基础】创建线程的主要方式

在Java中创建线程主要有三种方式: 继承Thread类 这是最传统的创建线程的方式。你需要创建一个Thread类的子类,并重写run()方法。在run()方法中编写线程要执行的代码。然后,实例化这个子类并调用start()方法来启动线程。 class MyThread exten…

【BUG】已解决:Downgrade the protobuf package to 3.20.x or lower.

Downgrade the protobuf package to 3.20.x or lower. 目录 Downgrade the protobuf package to 3.20.x or lower. 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身…

【昇腾AI创新大赛集训营南京站学习笔记】-Ascend算子开发课程

昇腾AI创新大赛训练营 14:00-14:30 基础知识-理论课 一、CANN 、达芬奇架构和算子 1.AI Core逻辑架构 达芬奇架构包含三部分: 1)计算类:矩阵计算单元(两个矩阵扔进去相乘)、向量计算单元、标量计算单元 2)控…

逻辑漏洞面试问题

1、你挖过业务逻辑漏洞吗?了解的有哪些?如何进行的?对于业务逻辑漏洞,只有一个登录框,你 会怎么测试?逻辑漏洞 xray 如何避免敏感操作? 常见的业务逻辑漏洞类型包括:订单支付漏洞、…

剑指offer的面试题,赋值运算符函数

class CMyString {public:CMyString(char*pDatanullptr);CMyString(const CMyString&str);~CMyString(void);private:char*m_pData;} 如上为类型Cmystring的声明,请为该类型添加赋值运算符函数。 class CMyString { public:CMyString(char* pData nullptr);CMy…

C#港澳台通行证识别接口、台胞证识别、ocr证件识别

在这个快节奏的时代,效率至上,每一秒都弥足珍贵。想象一下,无需手动输入繁琐的证件信息,仅需轻轻一扫,证面上所有文字信息便可呈现在眼前将是多么的便利,这得益于文字识别技术衍生下的-证件识别接口&#x…

基于单片机控制的变压器油压油温故障检测

摘 要 在电力系统的运行中,通过对其核心设备变压器的故障进行检测,以此能够及时、准确的发现变压器的故障,基于单片机控制的变压器油压油温的故障检测的方法,利用压力传感器、温度传感器对变压器的油压、油温进行采集并送入单片机…

vCenter 错误提示 “目标主机上的vmotion接口未配置”

vCenter 错误提示 “目标主机上的vmotion接口未配置” VMware 使用 vCenter 迁移 虚拟机报错 “目标主机上的 vMotion 接口未配置”,配置启用 vMotion 的步骤如下: (END)

【CentOS7】解决 CentOS 7 使用 `yum` 时出现的错误

解决 CentOS 7 使用 yum 时出现的错误 问题 在使用 yum 进行各种操作时(例如 Plesk 更新、系统更新、软件包安装等),可能会出现以下错误: Could not retrieve mirrorlist http://mirrorlist.centos.org/?release7&archx86…

Spring Bean 循环依赖

在Spring框架中,Bean的创建和管理是其核心功能之一。然而,在复杂的应用系统中,Bean之间可能会形成循环依赖(Circular Dependency),这种情况如果不加以妥善处理,将会导致Spring容器在初始化时抛出…

leetcode3098. 求出所有子序列的能量和

官解 class Solution(object):# 定义常量mod int(1e9 7) # 模数,用于防止结果溢出inf float(inf) # 无穷大,用于初始化时的特殊值def sumOfPowers(self, nums, k):n len(nums) # 数组长度res 0 # 用于存储最终结果# 三维动态规划表,…

Nacos-2.4.0最新版本docker镜像,本人亲自制作,部署十分方便,兼容postgresql最新版本17和16,奉献给大家了

基于Postgresql数据库存储的nacos最新版本2.4.0,采用docker镜像安装方式 因业务需要,为了让nacos支持postgresql,特意花了两天时间修改了源码,然后制作了docker镜像,如果你也在找支持postgresql的nacos最新版本,恭喜你,你来的正好~ nacos-2.4.0 postgresql的数据库脚本…

C#中的new以及类

new关键字的用法 实例化对象:使用 new 关键字可以创建一个类的实例。例如: ​ MyClass obj new MyClass(); 指定构造函数:如果类有多个构造函数,可以使用 new 关键字指定使用哪一个构造函数来创建对象。例如: ​ MyC…

Apache SeaTunnel快速入门及原理和实践(一)

一、概述 主要从以下6个方面进行: 对数据集成做一个简单的概括对 SeaTunnel 做简单的介绍介绍 SeaTunnel 当前的原理和架构演进对当前市面上一些比较常见的数据集成工具进行对比,来解读一下现在市面上已经有了那么多数据集成工具,为什么我们…

Django Web框架——01

目录 文章目录 目录 Django框架的介绍起源&现状Django的安装 创建Django项目创建项目的指令Django项目的目录结构settings.py 文件介绍 URL 介绍URL定义Django如何处理一个URL对应的请求视图函数(view) Django 路由配置path() 函数path转换器 re_path()函数 HTTP协议的请求…

CoAP——Libcoap安装和使用(Ubuntu22.04)

1、简介 CoAP(Constrained Application Protocol)是一种专为受限设备和网络设计的应用层协议。它类似于HTTP,但具有更轻量级的特性,适合用于物联网(IoT)环境中的低功耗和低带宽设备。Libcoap是一个轻量级的…

云计算实训12——配置web服务器、配置客户端服务器、配置DNS服务、实现DNS域名解析

一、配置web服务器 准备操作 首先在正式配置之前需要做以下操作 关闭防火墙 systemctl stop firewalld 永久关闭防火墙 systemctl disable firewalld 关闭selinux setenforce 0 永久关闭selinux vim /etc/selinux/config selinuxpermissive 还需要保证能够正常ping通www.bai…

什么是 JSON文件

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它独立于语言,易于人阅读和编写,同时也易于机器解析和生成。JSON基于JavaScript的对象字面量语法,但是它作为一种数据格式,并不仅…

【SpingCloud】客户端与服务端负载均衡机制,微服务负载均衡NacosLoadBalancer, 拓展:OSI七层网络模型

客户端与服务端负载均衡机制 可能有第一次听说集群和负载均衡,所以呢,我们先来做一个介绍,然后再聊服务端与客户端的负载均衡区别。 集群与负载均衡 负载均衡是基于集群的,如果没有集群,则没有负载均衡这一个说法。 …