Electron-开发实践:创建Window
【前言】
Electron入门就需要创建一个window,
window是用来展示ui的,
window是在渲染进程。
【创建window】
新建一个前端项目,
package.json内容如下,
{
"name": "window-test",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "electron main.js"
},
"devDependencies": {
"electron": "^25.2.0"
}
}
可以看到安装了Electron的开发依赖,
即执行过下面的命令,
npm i -D electron
且有一个start命令用来本地启动Electron应用,
对应的main.js中的内容如下,
创建了一个BrowserWindow并加载了一个在线的url。
// In the main process.
const { BrowserWindow } = require("electron");
const win = new BrowserWindow({ width: 800, height: 600 });
// Load a remote URL
win.loadURL("https://github.com");
执行npm start查看效果如下,

这个提示是不能在app ready前创建window,
修改代码如下,
// electron
const { app, BrowserWindow } = require("electron");
// app ready
app.on("ready", () => {
const win = new BrowserWindow({ width: 800, height: 600 });
// Load a remote URL
win.loadURL("https://github.com");
});
再次执行npm start,应用跑起来了,

【loadURL】
可以看到上面使用的是loadURL这个方法,
这个方法可以加载一个已经可以访问的网页,
这个方法也是将一个在线网站转为Electron应用最快的办法,
但是可能会有一些兼容性问题,
并且启动window后要等待网页加载完,
用户体验较差。
【ready-to-show】
解决先显示window在加载页面的问题,
可以将代码修改一下,如下,
1.创建window时添加了一个show属性
2.在ready-to-show事件后才展示window
// electron
const { app, BrowserWindow } = require("electron");
// app ready
app.on("ready", () => {
// create window
const win = new BrowserWindow({
width: 800,
height: 600,
show: false,
});
// ready to show
win.once("ready-to-show", () => {
win.show();
});
// load url
win.loadURL("https://github.com");
});
【背景色】
上面ready-to-show的事件,
在一些性能较差的电脑上响应较慢,
用户实际的体验可能是点击了应用,
但是没有响应,
其实Electron已经在启动了,
但是ready-to-show事件比较慢,
这种情况下推荐另一种方案,
给window设置一个背景色,
这样的效果:
1.性能较好的电脑,快速启动window和展示内容
2.性能较差的电脑,先显示window和背景色,然后展示内容
修改代码如下:
// electron
const { app, BrowserWindow } = require("electron");
// app ready
app.on("ready", () => {
// create window
const win = new BrowserWindow({
width: 800,
height: 600,
backgroundColor: "#2e2c29",
});
// load url
win.loadURL("https://github.com");
});
【常见属性】
下面看一些window常见的属性,
包括宽高,位置,最大最小宽高,是否可以改变大小等等,
// electron
const { app, BrowserWindow } = require("electron");
// app ready
app.on("ready", () => {
// create window
const win = new BrowserWindow({
width: 400,
height: 400,
x: 0,
y: 0,
minWidth: 200,
minHeight: 200,
maxWidth: 800,
maxHeight: 800,
resizable: true,
movable: true,
minimizable: true,
maximizable: true,
closable: true,
focusable: true,
backgroundColor: "#2e2c29",
});
// load url
win.loadURL("https://github.com");
});
【标题栏】
titleBarStyle属性用来设置标题栏的样式,
‘default’是默认效果,mac下效果:

‘hidden’是隐藏标题栏,mac上只保留左上角按钮,

‘hiddenInset’也是隐藏标题栏,mac上保留左上角按钮,

【loadFile】
上面介绍了使用loadURL加载一个已经存在的页面,
这种方法不管使用ready-to-show还是使用背景色,
在用户体验方面都有会一点问题,
1.使用ready-to-show:在性能较低的电脑上启动慢
2.使用背景色:虽然用户可以先看到窗口,但是要等待内容的加载
其实在Electron的开发过程中一般不使用loadURL,
loadURL只是加载网页,
Electron开发应用更多的是加载本地文件,
这样就基本没有等待网页记载的过程了。
而加载本地文件使用loadFile即可,
代码如下,
// electron
const { app, BrowserWindow } = require("electron");
// app ready
app.on("ready", () => {
// create window
const win = new BrowserWindow({
width: 400,
height: 400,
});
// load file
win.loadFile("./renderer/index.html");
});
【qiao-x-window】
封装了electron的window常见方法,
https://code.insistime.com/#/qiao-x-window
例如通过本地文件打开窗口,
可以将代码修改为下面的,
// electron
const { app } = require("electron");
// q
const { openWindowByFile } = require("qiao-x-window");
// app ready
app.on("ready", async () => {
const win = await openWindowByFile("./renderer/index.html");
console.log(win);
});
【总结】
1.创建window-loadURL
2.创建window-loadFile
3.创建window-ready-to-show
4.创建window-背景色
5.创建window-标题栏
6.Electron window工具: https://code.insistime.com/#/qiao-x-window
相关推荐
Electron-开发实践:注册苹果开发者账号
【前言】 当使用electron开发完一个mac应用后, 如果想正常在mac电脑上使用, 还需要对你的应用进行签名和公证, 而签名和公证都需要一个苹果开发者账号, 这个过程中有一些坑,记录一下。 【注册】 注册地址: https://developer.apple.com/cn/programs/e
Electron-开发实践:clipboard剪切板
【前言】 Electron提供获取和写入系统剪切板的操作, 详见:https://www.electronjs.org/docs/latest/api/clipboard 【进程】 clipboard支持主进程使用,支持没有开启sandbox的渲染进程使用 【系统】 大部分clipboard的api
Electron-开发实践:crash上报及解析
【前言】 electron开发实践中,crash的上报不可避免, electron中可以通过crashReporter来上报crash, https://www.electronjs.org/docs/latest/api/crashreporter , 而处理crash使用的是crashpad,有
Electron-开发实践:DMG安装包定制
【前言】 dmg文件是mac端常见的安装包格式, 前面几篇文章已经使用electron开发并打包好一个应用了, 本文主要讲下定制dmg安装包, 前面几篇文章: 一篇文章学会Electron Electron开发实践:本地数据库SQLite Electron开发实践:使用Monorepo管理Elect
Electron-开发实践:包体积精简
【前言】 前面几篇文章讲了从开发electron应用到mac打包, 相关文章: 一篇文章学会Electron Electron开发实践:本地数据库SQLite Electron开发实践:使用Monorepo管理Electron项目 Electron开发实践:Mac打包 Electron开发实践:注册
Electron-开发实践:制作icns图标
【省流】 封装了一个mac上将png转为icns的应用, 欢迎大家使用: https://electronicns.com/ 【前言】 将Electron应用打包为Mac应用包的时候, 这里以electronpackager打包为例, 默认打包运行后的应用图标是这样, 【icns】 按electro
Electron-开发实践:本地日志
【前言】 使用electron开发好本地应用后, 本地日志记录必不可少, 这样可以通过日志获取用户操作信息以及定位bug等, 本地日志与实时性的埋点上报稍微有不同, 本地日志量更大,信息更全,且不是所有信息都时候上报。 【与nodejs本地日志的异同】 electron写本地日志和nodejs写本地
Electron-开发实践:定制Mac菜单
【前言】 前面几篇文章讲了从开发electron应用到mac打包, 相关文章: 一篇文章学会Electron Electron开发实践:本地数据库SQLite Electron开发实践:使用Monorepo管理Electron项目 Electron开发实践:Mac打包 Electron开发实践:注册
Electron-开发实践:Mac应用包签名和公证
【前言】 一篇文章学会Electron Electron开发实践:本地数据库SQLite Electron开发实践:使用Monorepo管理Electron项目 当你通过上面这些文章使用Electron开发好一个桌面应用, Electron开发实践:Mac打包 并通过这个文章在本地打包好了mac的应
Electron-开发实践:Mac打包
【前言】 当本地开发好一个 electron 应用后, 最想做的事情就是打包然后分享出去。 如何用 monorepo 管理一个 electron 项目, 可以看这里: Electron开发实践:使用Monorepo管理Electron项目 【构建】 接上一篇,打包是在 packages/dishie
Electron-开发实践:使用Monorepo管理Electron项目
【前言】 本文讲如何用 monorepo 来管理一个 electron 项目 代码地址: https://github.com/uikoo9/dishimonorepo/tree/electronmonorepo 【初始化】 首先需要初始化一个 monorepo 前端项目, 具体步骤可以看这里: 初
Electron-开发实践:注册快捷键
【前言】 本文介绍一下electron应用中如何注册快捷键 【主进程】 主进程注册快捷键比较简单,需要注意的是在app ready后使用, 常见键盘映射: https://www.electronjs.org/docs/latest/api/accelerator 另外在推出app时需要将所有注册的
Electron-开发实践:几种更新方式
【前言】 Electron开发桌面APP后, 接着涉及一个问题就是如何更新后续的版本, 本文介绍几种更新的方式。 【Electron架构】 用Electron开发的桌面APP, 其实包含几个部分: 1\. Electron本身的环境 2\. 主进程,主进程中又分为Nodejs部分,和非Nodejs部
一篇文章学会Electron
【前言】 javascript语言的强大生命力,为前端开发拓展了很多业务 网页端业务:基于js,html,css开发网页相关业务 服务端业务:基于nodejs开发服务端业务 桌面端业务:基于chromium和nodejs开发桌面业务 移动端业务:基于webview开发移动端业务 【electron简
Electron-开发实践:本地数据库SQLite
【前言】 本地存取数据的一些常见的手段:Cookie,LocalStorage,IndexedDB,SQLite等, 这里做下简单的对比 Cookie 存储大小:4k 设置有效期:可以 服务端获取:可以 特点:简单数据存取 LocalStorage 存储大小:5M 设置有效期:不行 服务端获取:不行