Electron

官网: https://www.electronjs.org/

Electron是一个使用JavaScript、HTML和CSS构建跨平台的桌面应用程序。它基于Node.js和Chromium,被Atom编辑器和许多其他应用程序使用。
Electron兼容Mac、Windows和Linux,可以构建出三个平台的应用程序。
相对而言,Electron 的维护成本较低,因而十分流行。VS Code、一些企业的即时通讯工具等,都使用了Electron。但存在性能问题,同时也引入了其他的安全问题。

Electron = chromium + nodejs + native api(原生接口)

相关概念:
主进程(Nodejs): 它运行在一个完整的Node.js环境中,负责控制您应用的生命周期,显示原生界面,执行特殊操作并管理渲染器进程
渲染进程: chromium
预加载脚本: preload

通信:

渲染进程 -> 预加载脚本 -> 主进程
主进程 -> 预加载脚本 -> 渲染进程

[配置]
npm config set registry https://registry.npmmirror.com/

npm config set electron_mirror https://npmmirror.com/mirrors/electron/

[安装]
npm install --save-dev electron

[使用]

快捷键:
Ctrl + Shift + i ==> 快速打开devtools调试工具

[打包]
electron-builder: https://www.electron.build/index.html

[调试]

一个正常的Electron程序,通常它的 JS 源码会被打包到 .asar文件中,或者直接以JS文件的方式存储在程序目录内,下面是一个例子。

针对asar文件,可以用官方提供的工具(https://github.com/electron/asar) 进行解包分析,通过extract参数进行解包

Electron应用实际上也是个Chromium ,可以通过Chromium的方式开启开发者工具。以某工具为例为例,在运行程序时,添加–remote-debugging-port=xxxx 参数,即可在对应端口为Electron应用的主窗口开启远程调试功能:
这里端口需要根据inspect(chrome://inspect/)中的配置来选择。

这里使用9222端口,在命令行添加参数启动

启动后可以在inspect页面看到对应的Target:

然后就可以点击进入进行调试了,不过此时开启的是Render Process的开发者工具。

我们可以通过添加–inspect=9222参数来调试Main Process。

Debugtron调试Electron应用

Debugtron是一个基于Electron开发的客户端桌面GUI程序,可以用于调试生产环境下的 Electron 应用。
项目地址:https://github.com/pd4d10/debugtron
直接下载对应的Releases版本,安装后即可使用。

直接将要调试的Electron应用拖拽过来即可。

不过debugtron中没有找到堆栈调用的信息,可以根据这里端口(devtools),添加到inspect的配置中,用chrome的inspect进行调试。

这样就能跑起来,调起来了。
不过现在大多的应用都会对关键的js进行混淆加密,或者使用修改过的Chromium内核

桌面应用开发之Electron的更多相关文章

  1. Electro桌面应用开发之HelloWorld

    简介 Electron (http://http://electron.atom.io‎)提供了一个使用Node.js进行桌面应用开发的环境. 本文介绍了一个基于Electron的HelloWorld ...

  2. 桌面应用开发之WPF动态背景

      因为项目需要,在WPF开发的桌面应用中,登陆页面需使用动态背景.由于没有前端开发人员,所以由半吊子的后端开发人员根据效果图写前端xaml.去掉页面上边框,抽离动态背景设置代码: <Windo ...

  3. 桌面应用开发之WPF页面导航

    先看效果图 Get Start   为了项目解耦,使用mvvmlight框架.MVVM设计模式请自行了解. 1 新建项目   新建一个MvvmLight(WPF)项目,删除其中无关文件夹:Design ...

  4. UWP开发之Mvvmlight实践七:如何查找设备(Mobile模拟器、实体手机、PC)中应用的Log等文件

    在开发中或者后期测试乃至最后交付使用的时候,如果应用出问题了我们一般的做法就是查看Log文件.上章也提到了查看Log文件,这章重点讲解下如何查看Log文件?如何找到我们需要的Packages安装包目录 ...

  5. Cocos2d-x 3.x游戏开发之旅

    Cocos2d-x 3.x游戏开发之旅 钟迪龙 著   ISBN 978-7-121-24276-2 2014年10月出版 定价:79.00元 516页 16开 内容提要 <Cocos2d-x ...

  6. DarkStone - 跨平台移动应用开发之 Flex 的崛起

    我的好友Ds 发布一个flex的消息.我帮忙转发 DarkStone - 跨平台移动应用开发之 Flex 的崛起 (2013-08-20 22:28:32)     此文章由 周戈 (DarkSton ...

  7. Android开发之Intent跳转到系统应用中的拨号界面、联系人界面、短信界面

    现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下. 1.跳转到拨号界面,代码如下: 1)直接拨打 Intent intentPhone = new Intent ...

  8. 移动前端开发之viewport,devicePixelRatio的深入理解

    移动前端开发之viewport的深入理解 在移动设备上进行网页的重构或开发,首先得搞明白的就是移动设备上的viewport了,只有明白了viewport的概念以及弄清楚了跟viewport有关的met ...

  9. 高效开发之SASS篇 灵异留白事件——图片下方无故留白 你会用::before、::after吗 link 与 @import之对比 学习前端前必知的——HTTP协议详解 深入了解——CSS3新增属性 菜鸟进阶——grunt $(#form :input)与$(#form input)的区别

    高效开发之SASS篇   作为通往前端大神之路的普通的一只学鸟,最近接触了一样稍微高逼格一点的神器,特与大家分享~ 他是谁? 作为前端开发人员,你肯定对css很熟悉,但是你知道css可以自定义吗?大家 ...

  10. .NET Core 跨平台 GUI 开发之 GTtkSharp 初级篇

    .NET Core 跨平台 GUI 开发之 GTtkSharp 初级篇 本文作为初级篇,适合已经安装好.NET Core 环境以及 Gtk 环境,并具备了 C#开发基础知识,能跑一些简单的例子,希望更 ...

随机推荐

  1. k8s 知识

    命令 Pod 管理 kubectl get pods 查看pod在哪个node上 kubectl get pods -o wide kubectl describe pod pod_name 创建新的 ...

  2. SpringCloudAlibaba 主要组件与nacos 填坑记录

    SpringCloudAlibaba 主要功能 与 实现组件 (1)SpringCloudAlibaba 主要功能 与 实现组件 [功能与实现组件:] 服务限流降级: 基本说明: 默认支持 WebSe ...

  3. 常回家看看之house_of_emma

    house_of_emma 前言: 相比较于house_of_kiwi(house_of_kiwi),house_of_emma的手法更加***钻,而且威力更大,条件比较宽松,只需要lagebin_a ...

  4. 2024-09-21:用go语言,给定一个字符串 s,字符串中的每个字符要么是小写字母,要么是问号‘?‘。对于一个仅包含小写字母的字符串t,我们定义cost(i)为在t的前i个字符中与t[i]相同的字

    2024-09-21:用go语言,给定一个字符串 s,字符串中的每个字符要么是小写字母,要么是问号'?'.对于一个仅包含小写字母的字符串t,我们定义cost(i)为在t的前i个字符中与t[i]相同的字 ...

  5. python08_05day

    #!/usr/bin/python# -*- coding: UTF-8 -*-from _ast import Param #查询数据库'''import MySQLdb conn = MySQLd ...

  6. 如何更改Wordpress语言为中文

    在使用WordPress的时候,一般安装默认语言是英文,可以在后台设置里面直接修改站点语言为简体中文,当后台没有语言选项框的这一栏,如下图所示,该怎么办呢? 这个时候我们可以找到文件wp-config ...

  7. javaScript遍历对象总结

    定义对象: const obj = { name: 'zlx', id: 245, age: 25, gender: '男', } 1. 使用 for... in..循环遍历 对象的属性有2种方式可以 ...

  8. jQuery的$(document).ready(function(){}) 和 原生 js 的load 等待加载事件有什么不同

    jQuery 的 $(function (){})  函数入口需要等待 DOM 结构绘制完成才会执行 , 不用等待外部资源加载完毕  和原生js 的 DOMContentLoaded 类似 , 2 者 ...

  9. 点亮PC13- 使用寄存器点亮

    #include "stm32f10x.h" // Device header int main(void) { // 打卡GPIOC的时钟 RCC->APB2ENR = 0 ...

  10. python实战-解析swagger-api接口信息

    # _*_ coding: UTF-8 _*_ """ @project -> file : swagger_api_parse_backup @Author : ...