Logo Vincent
返回文章列表

Electron-开发实践:创建Window

Electron
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 设置有效期:不行 服务端获取:不行

© 2026 vincentqiao.com . 保留所有权利。