3 - Electron app BrowserWindow对象-关于窗口

优雅的打开应用~

当加载缓慢,打开应用的一瞬间会出现白屏,以下方法可以解决

const mainWindow = new BrowserWindow({ show: false })
mainWindow.once('ready-to-show', () => {mainWindow.show()
})

设置背景颜色

const win = new BrowserWindow({ backgroundColor: '#2e2c29' })

定义多窗口

const createWindow = () => {const win = new BrowserWindow({width: 1000,height: 600,});win.loadFile("index.html");const win2 = new BrowserWindow({width: 600,height: 600,});win2.loadURL('https://www.csdn.net/')
};
创建了两个互不相干的窗口

定义父子窗口 

const createWindow = () => {const win = new BrowserWindow({width: 1000,height: 600,});win.loadFile("index.html");const win2 = new BrowserWindow({width: 600,height: 600,parent:win,//父窗口是win});win2.loadURL('https://www.csdn.net/')
};
  • 当不属于父子窗口时,拖动哪个窗口哪个窗口置顶 
  • 当属于父子窗口时,拖动窗口后,子窗口置顶,父窗口在下面 

frame属性

const createWindow = () => {const win = new BrowserWindow({width: 1000,height: 600,frame: false});win.loadFile("index.html");
};
frame:true
frame:false

 当frame:false时

  • 窗口不能拖动
  • 没有标题

用css解决窗口拖动方案

<style>html{height: 100%;user-select: none; //注意:使用这个之后不能使用其他控件、不能选中文本-webkit-app-region:drag;}
</style>

但是这时存在一些小bug,当我们想拖动滑动条时,还是拖拽的窗口。

input{-webkit-app-region:no-drag;
}

在你想拖拽的元素添加no-drag属性,就可以解决啦!

electron-win-state 保存窗口的状态

当用户拖拽窗口大小或位置,关闭应用后不会保留的;如果我们需要保存窗口状态可以试试下面插件

npm i electron-win-state   
const WinState=require('electron-win-state').default; const winState=new WinState({//初始化宽高defaultWidth:800, defaultHeight:600,
})
const createWindow = () => {const win = new BrowserWindow({...winState.winOptions, //在这里定义的宽高位置都要删掉哦!// width: 1000,// height: 600,// x:100,// y:100,backgroundColor:'black',});win.loadFile("index.html");winState.manage(win);//在函数最下方写入
};

require('xxx').default

第一次接触这个有点疑惑,不明白什么意思,举个例子

//导出接口export default function() {}
// 等效于:
function a() {};
export {a as default}; //意思是把a函数导出去

import、require、export、module.exports 混合使用详解_import module.exports-CSDN博客

did-finish-load 外部资源加载完毕,dom-ready DOM加载完毕

const wc = win.webContents;
wc.on("did-finish-load", () => {console.log("外部资源加载完毕");
});
wc.on("dom-ready", () => {console.log("DOM 加载完毕");
});

new-window

<div><a target="_blank" href="https://placekitten.com/500/500"><h3>Kitten</h3></a>
</div>
<script>
wc.on('new-window', (e, url) => {e.preventDefault()console.log('DOM Ready')
})
</script>

context-menu : 右键上下文信息 

只要用户点击右键,我们就可以做一些操作

wc.on('context-menu', (e, params) => {console.log(`Context menu opened on: ${params.mediaType} at x:${params.x}, y:${params.y}`)
})wc.on('context-menu', (e, params) => {console.log(`User seleted text: ${params.selectionText}`)console.log(`Selection can be copied: ${params.editFlags.canCopy}`)
})

executeJavaScript()

往页面中注入js

wc.on('context-menu', (e, params) => {//当我们点击右键时,往页面中注入一段js,表示我们选中的内容wc.executeJavaScript(`alert('${params.selectionText}')`)
})

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

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

相关文章

hyper-v ubuntu2204指定静态ip地址

虚拟机静态IP设置 虚拟机每次重新启动&#xff0c;都会动态分配IP&#xff0c;这导致我们无法使用一个固定的ip连接到虚拟机内部。解决该问题的最直接有效的办法就是给虚拟机绑定2张网卡&#xff0c;一张用于连接外网、一张用于连接内网。 init 0 关机&#xff0c;也可以从管…

flask 之上传与下载

from flask import Flask, render_template, request, send_from_directory, redirect, url_for import osapp Flask(__name__)# 上传文件存储路径 UPLOAD_FOLDER uploads app.config[UPLOAD_FOLDER] UPLOAD_FOLDERapp.route(/) def index():# 确保上传文件夹存在if not os.…

最新鸿蒙HarmonyOS 使用Progress、Toggle开发一个接单界面

Progress 进度条组件&#xff0c;用于显示内容加载或操作处理等进度。 接口 Progress(options: {value: number, total?: number, type?: ProgressType}) Toggle组件提供勾选框样式、状态按钮样式及开关样式。 接口 Toggle(options: { type: ToggleType, isOn?: boolean …

【漏洞复现】CVE-2023-6895 IP网络对讲广播系统远程命令执行

漏洞描述 杭州海康威视数字技术有限公司IP网络对讲广播系统。 海康威视对讲广播系统3.0.3_20201113_RELEASE(HIK)存在漏洞。它已被宣布为关键。该漏洞影响文件/php/ping.php 的未知代码。使用输入 netstat -ano 操作参数 jsondata[ip] 会导致 os 命令注入。 开发语言:PHP 开…

鸿蒙原生应用再添新丁!喜马拉雅入局鸿蒙

鸿蒙原生应用再添新丁&#xff01;喜马拉雅入局鸿蒙 来自 HarmonyOS 微博12月20日消息&#xff0c; #喜马拉雅正式完成鸿蒙原生应用版本适配#&#xff0c;作为音频业巨头的喜马拉雅 &#xff0c;将基于#HarmonyOS NEXT#创造更丰富、更智慧的全场景“声音宇宙”&#xff01;#鸿…

做一个wiki页面是体验HTML语义的好方法

HTML语义&#xff1a;如何运用语义类标签来呈现Wiki网页 在上一篇文章中&#xff0c;我花了大量的篇幅和你解释了正确使用语义类标签的好处和一些场景。那么&#xff0c;哪些场景适合用到语义类标签呢&#xff0c;又如何运用语义类标签呢&#xff1f; 不知道你还记不记得在大…

2023年总结|大家的共同努力成就了Sui网络的增长里程碑

2023年是Sui的开创之年&#xff0c;随着主网的推出&#xff0c;其创新技术真正经受了考验。在前一年开发了早期项目并在开发网和测试网上进行了工作之后&#xff0c;Sui作为Layer 1区块链投入了大量时间和精力&#xff0c;同时也背负着很多期待。 Sui汲取区块链行业的教训&…

C# WPF上位机开发(多线程中锁的使用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 多线程编程一般都会涉及到锁的时候&#xff0c;很多人可能觉得很意外&#xff0c;为什么会需要这么一个锁。本质上&#xff0c;这主要还是因为多线…

【C++初阶】学习string类的模拟实现

目录 前言&#xff1a;一、创建文件和类二、实现string类2.1 私有成员和构造函数2.2 析构函数2.3 拷贝构造函数2.3.1 写法12.3.2 写法2 2.4 赋值重载函数2.4.1 写法12.4.2 写法2 2.5 迭代器遍历访问2.6 下标遍历访问2.7 reserve2.8 resize2.9 判空和清理2.10 尾插2.10.1 尾插字…

逻辑门符号

逻辑门是用于实现布尔表达式&#xff08;特别是二值布尔表达式&#xff09;的基本电子电路。它们提供了一种基于布尔代数定律组合和处理数字信号的方法。 在数学上&#xff0c;我们可以使用布尔代数来处理二进制数并简化逻辑表达式。但在数字系统中实际实现时&#xff0c;我们…

(四)pytorch图像识别实战之用resnet18实现花朵分类(代码+详细注解)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、关于这个实战的一些知识点Q1&#xff1a;图像识别实战常用模块解读Q2:数据增强Q3:迁移学习Q4&#xff1a;平均全局池化Q5&#xff1a;设置哪些层需要训练时…

【lesson16】MySQL表的基本操作update(更新)和delete(删除)

文章目录 表的基本操作介绍update建表测试 delete建表测试 表的基本操作介绍 CRUD : Create(创建), Retrieve(读取)&#xff0c;Update(更新)&#xff0c;Delete&#xff08;删除&#xff09; update 建表 这里就不建表了&#xff0c;因为之前就建过了&#xff0c;这里给大家…