electron客户端开发
如何新建一个 Electron 项目?
electron快速入门笔记: https://www.jianshu.com/p/f134878af30f
然后自己新建一个 Electron 项目,在项目中输出 Hello World!
Electron 的背景信息
搭建完这个 Electron 项目后,相信大家对 Electron 已经有了初步的认知,接下来我们可以查看文档来获取 Electron 更多的背景信息: https://electronjs.org/docs/tutorial/about
我们知道 Electron 使用了 Chromium 的渲染库,我们可以把它看作一个精简版的 Chromium 浏览器。
Electron 里,存在一个 主进程 和一个 渲染进程,我们可以在下文中看到 主进程 和 渲染进程 的区别: https://www.w3cschool.cn/electronmanual/p9al1qkx.html
当我们运行一个 Electron 客户端时,客户端窗口是如何打开的?
这部分内容前面的几篇文章里也有,比较重要,这里单独拿出来再说一下:
我们在 package.json 中可以找到 "main" 属性,一般为 {"main": "./main"};
这里我们就是启动了 主进程 main.js, 我们打开 main.js 文件, 可以看到如下代码:
const { app, BrowserWindow } = require('electron');
const path = require('path');
const url = require('url'); let window; function createWindow() {
window = new BrowserWindow({ width: 1200, height: 900 }); window.loadURL(url.format({
pathname: path.join(__dirname, './index.html'),
protocol: 'file:',
slashes: true
})); // 打开调试工具.
window.webContents.openDevTools(); // 当 window 关闭时触发.
window.on('closed', () => {
window = null
})
} // 'ready' 后开始 createWindow
app.on('ready', createWindow); // Quit when all windows are closed.
app.on('window-all-closed', () => {
// On macOS it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
if (process.platform !== 'darwin') {
app.quit();
}
}); app.on('activate', () => {
// On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (window === null) {
createWindow();
}
});
我们可以看到这个文件中有一些 app.on 来接收事件,当 app.on('ready', createWindow) 时,我们调用了 createWindow 函数;在 createWindow 函数中创建了 new BrowserWindow, 然后进入了 ./index.html 文件。
备注:我们可以在这个文档中查到更多的事件: https://electronjs.org/docs/api/app
回到我们的 小班教室 和 1vN 客户端,我们来简单介绍下我们用到的一些 事件:
'ready': 当 Electron 完成初始化时被触发。
'open-url': 当用户想要在应用中打开一个 URL 时发出。
'activate': 当应用被激活时发出。
'before-quit': 在应用程序开始关闭窗口之前触发。
'window-all-closed': 当所有的窗口都被关闭时触发。
主进程(main)和渲染进程(renderer)间的通信
在 项目开发中,我们总会有时候,需要在 main 和 renderer 之间进行通信,Electron 提供了相应的通信方法:
ipcMain: https://electronjs.org/docs/api/ipc-main#ipcmain
ipcRenderer: https://electronjs.org/docs/api/ipc-renderer#ipcrenderer
在我们的客户端中,引入了 'electron-ipc' 库,使得通信方法更加简单:
const ipcp = require('electron-ipc'); // 发送
ipcp.publish('msgName', 'sendInfo'); // 接收
ipcp.subscribe('msgName', (msg) => {
console.log('msg', msg) // 'msg' 'sendInfo'
})
其中 'msgName' 是通道名(channel)。
如果我们想要在 subscribe 接收到消息之后再在 publish 的地方做出相关处理,则可以采用如下方式:
const ipcp = require('electron-ipc'); // 发送
ipcp.publish('msgName', 'sendInfo').then((res) => {
console.log('res', res) // 'res' 'msg has been accepted'
}); // 接收
ipcp.subscribe('msgName', (msg) => {
console.log('msg', msg) // 'msg' 'sendInfo'
return 'msg has been accepted'
})
这个依赖库让我们使用 ipc 通信更加简单,无需再考虑 main 和 renderer 的不同写法。具体实现逻辑可以查看源码,,源码中实际上只是做了一丢丢判断:
const IS_RENDERER = typeof window !== 'undefined' && window.process && window.process.type === 'renderer'
const TARGET = IS_RENDERER ? electron.ipcRenderer : electron.ipcMain 本篇来自于他人总结哦!
electron客户端开发的更多相关文章
- Electron+Vue开发跨平台桌面应用
Electron+Vue开发跨平台桌面应用 xiangzhihong发布于 2019-12-23 虽然B/S是目前开发的主流,但是C/S仍然有很大的市场需求.受限于浏览器的沙盒限制,网页应用无法满足某 ...
- C#.NET 大型通用信息化系统集成快速开发平台 4.0 版本 - 多系统开发接口 - 苹果客户端开发接口
最近工作上需要,给苹果客户端开发接口,实现集中统一的用户管理,下面是接口调用参考. 1: 获取OpenId? http://127.0.0.1/GetOpenId.ashx?username=Admi ...
- 在线教学、视频会议 Webus Fox(3) 客户端开发手册
本文主要介绍webus fox 客户端的配置及接口说明. 1. 文件列表和配置 1.1 文件列表 1.2 common.xml 配置 根据服务器端的部署, 替换[ServerUrl] , [RtmpP ...
- [原创]上海好买基金招高级Java技术经理/运维主管/高级无线客户端开发等职位(内推)
[原创]上海好买基金招高级Java技术经理/运维主管/高级无线客户端开发等职位(内推) 内部推荐职位 高级JAVA技术经理: 岗位职责: 负责项目管理(技术方向),按照产品开发流 ,带领研发团队,制定 ...
- iOS客户端开发与Web前端开发
转载自:http://blog.cnbang.net/tech/1813/不知不觉做iOS客户端开发已经半年多了,了解到iOS客户端开发与Web前端开发的一些异同,写一下. 版本升级.用户角度上看,客 ...
- 基于Android的小巫新闻客户端开发系列教程
<ignore_js_op> 141224c6n6x7wmu1aacap7.jpg (27.51 KB, 下载次数: 0) 下载附件 保存到相册 23 秒前 上传 <ignor ...
- ASP.NET5之客户端开发:Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用
Grunt和Gulp是Javascript世界里的用来做自动压缩.Typescript编译.代码质量lint工具.css预处理器的构建工具,它帮助开发者处理客户端开发中的一些烦操重复性的工作.Grun ...
- [转] electron实战开发详细流程
[From] http://www.myk3.com/arc-8856.html 很久没有更新博客,人越来越懒了,唉 说好做的electron教程距离上次玩electron已经过去了好几个月了.. 这 ...
- 用Jersey为Android客户端开发Restful Web Service
平时在做Android客户端的时候经常要与服务器之间通信,客户端通过服务端提供的接口获取数据,然后再展示在客户端的界面上,作为Android开发者,我们平时更多的是关注客户端的开发,而对服务端开发的关 ...
随机推荐
- 可视化图表库--goJS
GoJS是Northwoods Software的产品.Northwoods Software创立于1995年,专注于交互图控件和类库.旗下四款产品: GoJS:用于在HTML上创建交互图的纯java ...
- Hibernate 基本使用
Hibernate框架概述 一.什么是框架 软件的一个半成品,已经帮你完成了部分功能. 把一些不确定的东西,按照框架要求,达到相应的功能 Hibernate是JavaEE技术三层架构所用到的技术 二. ...
- SQL中AVG()、COUNT()、SUM()等函数对NULL值处理
一.AVG() 求平均值 注意AVE()忽略NULL值,而不是将其作为“0”参与计算 二.COUNT() 两种用法 1.COUNT(*) 对表中行数进行计数 不管是否有NULL 2.COUNT(字段名 ...
- group by 分组去重查询
数据库中的数据是这样的: 想要看看有几种类型,可以用group by: select * from activiti.act_ru_task where PROC_INST_ID_ in (selec ...
- linux内核睡眠状态解析
1. 系统睡眠状态 睡眠状态是整个系统的全局低功耗状态,在这种状态下,用户空间的代码不能被执行并且整个系统的活动明显被降低 1.1 被支持的睡眠状态 取决于所运行平台的能力和配置选项,Linux内核能 ...
- leetcode 55. Jump Game、45. Jump Game II(贪心)
55. Jump Game 第一种方法: 只要找到一个方式可以到达,那当前位置就是可以到达的,所以可以break class Solution { public: bool canJump(vecto ...
- lua日期处理函数
function day_step(old_day,step) local y,m,d if("0" ~= string.sub(old_day,6,6)) then ...
- nmealib-0.5.3 问题 Build Error: undefined reference to `ceil'
When building on Ubuntu 12.x the build fails with the following error… gcc samples/generate/main.o - ...
- Spring Boot学习笔记——Spring Boot与Redis的集成
一.添加Redis缓存 1.添加Redis起步依赖 在pom.xml中添加Spring Boot支持Redis的依赖配置,具体如下: <dependency> <groupId> ...
- HTML滚动时位置固定
现在显示器一般都是宽屏,网页两端常常会留白. 两边可能会放一些推荐.标签或是导航什么的辅助模块. 现在有的网站页面内容过长时,用户将滚动条向下拉时,拉到一定程度,左右两侧的辅助模块就会固定在指定位置, ...