二维码
微世推网

扫一扫关注

当前位置: 首页 » 快报资讯 » 行业介绍 » 正文

「Electron跨平台桌面应用开发_4」系统托盘功

放大字体  缩小字体 发布日期:2022-07-07 14:09:30    作者:李亚蒙    浏览次数:231
导读

本章主要内容1.优化程序,解决启动白屏得问题2.添加系统托盘功能一、优化程序,解决启动白屏问题现在,当我们在启动Electron应用时会发现应用会有一会儿只有带白屏得窗口,而正式得内容(这里是网页index.html)才会加载进窗口。这时,我们可以在创建窗口得时候先不让其显示,等网页加载完后我们再显示窗口。1.修改 main.js

本章主要内容
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;

再次运行程序可以看到效果。

可以感谢阅读菜单看看效果。

 
(文/李亚蒙)
打赏
免责声明
• 
本文为李亚蒙原创作品•作者: 李亚蒙。欢迎转载,转载请注明原文出处:http://www.udxd.com/kbzx/show-107857.html 。本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们邮件:weilaitui@qq.com。
 

Copyright©2015-2023 粤公网安备 44030702000869号

粤ICP备16078936号

微信

关注
微信

微信二维码

WAP二维码

客服

联系
客服

联系客服:

24在线QQ: 770665880

客服电话: 020-82301567

E_mail邮箱: weilaitui@qq.com

微信公众号: weishitui

韩瑞 小英 张泽

工作时间:

周一至周五: 08:00 - 24:00

反馈

用户
反馈