网站首页 > 基础教程 正文
本章主要内容
1.优化程序,解决启动白屏的问题
2.添加系统托盘功能
一、优化程序,解决启动白屏问题
现在,当我们在启动Electron应用时会发现应用会有一会儿只有带白屏的窗口,而正式的内容(这里是网页index.html)才会加载进窗口。这时,我们可以在创建窗口的时候先不让其显示,等网页加载完后我们再显示窗口。
1.修改 main.js
这里我们只需要修改createWindow()方法:
function createWindow () {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
icon: path.join(__dirname, 'public/favicon.ico'),
show: false
});
mainWindow.loadFile('index.html')
mainWindow.on('ready-to-show', () => {
mainWindow.show();
});
}
2.运行命令启动应用
npm run start
npm run start等同于npm start。
现在我们可以看到,应用显示的时候我们的网页也展示了,已经看不到白屏。
二、添加系统托盘功能
1.修改 main.js
let iconPath = path.join(__dirname, 'public/favicon.ico');
function createWindow () {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
icon: iconPath,
show: false
});
mainWindow.loadFile('index.html');
// 等窗口准备好显示时再显示,就不会出现白屏
mainWindow.on('ready-to-show', () => {
mainWindow.show();
});
}
function createTray() {
const tray = new Tray(iconPath);
tray.setToolTip('这是electron应用!');
}
app.whenReady().then(() => {
createWindow();
createTray();
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
});
});
2.运行程序
npm start
系统托盘已经显示了我们应用的图标。
当然,这里我们因为只是展示如何添加系统托盘功能,没有给它增加其它功能,所以直接修改了main.js,而在现实场景中,我们的应用程序的系统托盘功能可能非常复杂,这时就像我在前面添加菜单时所提到的,给系统托盘功能新建一个单独的文件将总会是一个最佳实践,否则我们的main.js最后会臃肿不堪,不便于维护。
3.新建 tray.js文件
const { Tray } = require("electron");
let appTray = null;
const tray = (icon) => {
appTray = new Tray(icon);
appTray.setToolTip('这是electron应用!');
}
module.exports = tray;
4.修改 main.js
const { app, BrowserWindow, Menu} = require('electron');
const menu = require('./menu');
const path = require('path');
const tray = require('./tray'); // 导入tray模块
let iconPath = path.join(__dirname, 'public/favicon.ico'); // 托盘图标的地址
let mainWindow = null;
function createWindow () {
mainWindow = new BrowserWindow({
width: 800,
height: 600,
icon: iconPath,
show: false
});
mainWindow.loadFile('index.html')
mainWindow.on('ready-to-show', () => {
mainWindow.show();
});
}
app.on('ready', () => {
createWindow();
Menu.setApplicationMenu(menu);
tray(iconPath); // 创建托盘图标
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
});
});
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
再次运行程序可以看到如上面第2步一样的效果。
接下来我们就可以在tray.js中修改增加我们想要的功能。这里我们就以添加一个菜单为例。
5.给托盘添加菜单
这里我们只需要修改tray.js就行了,可以参考二 自定义应用菜单 中menu.js创建菜单的方法。
const { Tray, dialog, Menu, app } = require("electron");
let appTray = null;
const template = [
{
label: '关于electronapp',
click() {
dialog.showMessageBox({
message: '这是一个Electron应用!',
type: 'info',
title: 'electron应用'
});
}
},
{
type: 'separator'
},
{
label: '退出',
click() {
app.quit();
}
}
];
const contextMenu = Menu.buildFromTemplate(template);
const tray = (icon) => {
appTray = new Tray(icon);
appTray.setToolTip('这是一个electron应用!');
appTray.setContextMenu(contextMenu);
}
module.exports = tray;
再次运行程序可以看到效果。
可以点击菜单看看效果。
- 上一篇: 超级简单 Bing美图每天自动收 收藏美图
- 下一篇: 一大波开源小抄来袭 开源小说软件下载
猜你喜欢
- 2024-12-22 一大波开源小抄来袭 开源小说软件下载
- 2024-12-22 超级简单 Bing美图每天自动收 收藏美图
- 2024-12-22 使用Python进行并发编程 python 并发编程
- 2024-12-22 我的世界计分板命令创建队伍教程详解
- 2024-12-22 Webpack5 配置手册(从0开始) webpack简单配置
- 2024-12-22 electron开发桌面应用实现串口通信,看完你就学会了
- 2024-12-22 JavaScript中原生的原型 Prototype
- 2024-12-22 webpack系列学习-基本用法 webpack基本使用
- 2024-12-22 前端技术探秘-Nodejs的CommonJS规范实现原理
- 2024-12-22 vue: 在页面模板中使用{{js变量}}
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)