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开发者,我们平时更多的是关注客户端的开发,而对服务端开发的关 ...
随机推荐
- 2018-2019-2 (内附jdk与webgoat完整安装教程)《网络对抗技术》Exp9 Web安全基础 Week13 20165233
Exp9 Web安全基础 目录 一.基础问题 二.实验步骤 实验前准备:jdk与webgoat的安装 实验点一:SQL 命令注入(Command Injection) 数字型注入(Numeric SQ ...
- arcgis python 发送邮件
import arcgisscripting, smtplib, os, sys, traceback from email.MIMEMultipart import MIMEMultipart fr ...
- daoliu平台:测试线路图
1.进行需求收集及分析 搜索关键字:导流平台 同类产品体验及熟悉 搞清楚,业务流.数据流.用户焦点 2.初步熟悉原型 初步熟悉.遍历原型, 初步进行测试需求分析 3.聆听及和权威的人进行沟通 测试人员 ...
- Android简单实现滚动悬停效果
import android.content.Context; import android.support.design.widget.TabLayout; import android.suppo ...
- [Java复习] 分布式高可用-Hystrix
什么是Hystrix? Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制. Hystrix 的设计原则 对依赖服务调用时出现的调用延迟和调用失败进 ...
- 简单模拟 Promise
class promise { constructor(fn) { this.data = null; this.err = null; this.isPromise = false; this.er ...
- tcpdump抓包代码
tcpdump - tcp[:]=:]=0x4854 or tcp 抓出来的包可以导入wireshark分析 以上代码曾经在ios越狱机器上使用,用于抓包,具体也记不起来了 导入wireshark效果
- Linux - Linux命令行常用快捷键
Common Shortcut Key 用途 快捷键 说明 光标移动 Ctrl + a 把光标移到行首 Ctrl + e 把光标移到行尾 Ctrl + x 在 EOL 和当前位置移动光标 输入编辑 C ...
- iOS- Core Foundation对象与OC对象相对转换
对ARC盲目依赖的同学: 1过度使用block后,无法解决循环引用问题 2遇到底层Core Foundation对象,需要自己手工管理它们的引用计数时,显得一筹莫展 first:对于底层Core Fo ...
- 【c# 学习笔记】索引器
当一个类包含数组成员时,索引器 的使用将大大地简化对类中数组成员的访问.索引器的定义类似于属性,也具有GET访问器和set访问器,如下: [修饰符] 数据类型 this[索引类型 index] { g ...