Electron桌面客户端美化笔记

美化内容

1.Electron自定义窗口标题栏
2.为标题栏增加图标,放大,刷新,关闭功能按钮(涉及主进程和渲染进程通信)
3.鼠标右键新增自定义菜单按钮

Electron自定义窗口标题栏

我们知道Electron窗口可直接加载网页连接(比如百度),打包后即可安装(exe即桌面程序),所以很多网站做好web端的同时,可能需要提供一个可安装执行的桌面程序,使得用户觉得更直观(有安装图标,点击即运行),而无需打开浏览器,点击连接或则输入网址访问。
但是Electron自带标题栏样式很不美观,我们往往需要自定义顶部标题栏已符合我们自己的程序。这就需要自定义标题栏,需要以下几个步骤:

  1. 去掉原生标题栏 ,将原生标题栏取消或隐藏调,在main.js中进行窗口配置
const WIDTH = 1550
const HEIGHT = 900
let mainWindow
let winConfig = {
   width: WIDTH,
   transparent: false,//修改,否则窗口放大没法恢复
   height: HEIGHT,
   show: false,
   resizable: true,
   fullscreenable: true,
   maximizable: true,
   titleBarStyle: 'hidden',   //启用自定义标题栏
   frame: true,
   webPreferences: {
       preload: path.join(__dirname, 'preload.js'),
       // 2. Enable Node.js integration
       nodeIntegration: true,
       enableRemoteModule: true,
       contextIsolation: false,
       webSecurity: false,  //禁用同源策略
       webviewTag: true,
       allowRunningInsecureContent: true,
       plugins: true,
       show: false
   },

   icon: path.join(__dirname, "./public/icon.ico")
}
mainWindow = new BrowserWindow(winConfig)
  1. mainWindow = new BrowserWindow(winConfig)传入winConfig
  2. 新增本地html文件index.html,index文件分为两个部分,即顶部标题栏,和以下的内容区,标题栏用于替换窗体原生的标题栏,内容区则用于加载网页地址;
  3. 特别注意加载内容区使用webview而非iframe 这样很多功能在后续的实现中会非常方便比如刷新,前进后退等;
    请添加图片描述

顶部标题栏(本地index.html中)根据自己的css随意适配,只需要注意点击事件和触发流程,如上图代码(仅举例一个关闭按钮),那么如何调用ectron关闭窗口功能呢请添加图片描述
当点击右上角关闭按钮时候,closeWindow()调用,只需要 ipcRenderer.send(“closeWindow”);发送一个消息即可
在index.html script节点中添加
const {ipcRenderer} = require(‘electron’)即可使用

同时发送消息需要主进程事先注册消息监听,即在main.js中事先注册,注意事件关键字closeWindow“要和发送消息相匹配,同理 main.js中引入ipcMain即可使用
const {ipcMain} = require(“electron”)

ipcMain.on('closeWindow', async (event) => {
    console.log("closeWindow,关闭组件进程并关闭窗口")
    killThirdPartyWidgets().then(() => {
        if (mainWindow) {
            mainWindow.close()
        }
    })
})

这样就实现了一个简单的关闭窗口功能,调用window.close()方法

鼠标右键新增自定义菜单按钮

Menu, , MenuItem 同上ipcMain引入:
Menu.setApplicationMenu(null);
const menu = new Menu();
menu.append(new MenuItem({
label: ‘刷新’, click: function (event) {
mainWindow.webContents.send(“onRefreshWebPage”, “刷新webview”);
}
}))
app.on(“web-contents-created”, (…[/* event */, webContents]) => {
//Webview is being shown here as a window type
webContents.on(“context-menu”, (event, click) => {
event.preventDefault();
menu.popup(webContents);
}, false);
});
需要在index.html中事先监听事件onRefreshWebPage
//onRefresh
ipcRenderer.on(‘onRefreshWebPage’, (event, data) => {
reloadPage()
})
reloadPage 即为webview 刷新api

  • 25
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Electron 中实现客户端的增量更新可以通过以下步骤进行: 1. 生成差异包:在每次应用程序更新时,将新版本与旧版本进行比较,生成差异包。差异包只包含了新版本与旧版本之间的变化部分,而不是整个应用程序的完整包。 2. 服务器端配置:搭建一个服务器来存储应用程序的更新文件和元数据。服务器需要提供一个接口,供客户端查询是否有可用的更新。 3. 客户端检查更新:在应用程序启动时,客户端向服务器发送请求,查询是否有可用的更新。服务器会返回最新版本的元数据,包括差异包的下载链接、版本号等信息。 4. 下载差异包:如果有可用的增量更新,客户端会从服务器上下载对应的差异包文件,而不是整个应用程序包。 5. 合并差异包:客户端使用差异包和旧版本的应用程序文件进行合并操作,生成新版本的应用程序文件。 6. 更新应用程序:将合并后的新版本应用程序文件替换掉旧版本的文件。可以使用 Electron 提供的文件系统 API 或其他工具来实现文件替换操作。 7. 重启或生效:重新启动应用程序以使更新生效。可以通过 Electron 的自动重启机制或向用户显示提示信息来通知更新已完成。 需要注意的是,增量更新可能需要更多的服务器端和客户端的逻辑处理,而且在某些情况下可能会有一些复杂性。此外,确保增量更新过程的安全性和稳定性也很重要,例如对下载的文件进行校验、错误处理和回滚机制等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值