electron 学习笔记
一、快速搭建一个electron 项目结构
# 克隆示例项目的仓库
$ git clone https://github.com/electron/electron-quick-start # 进入这个仓库
$ cd electron-quick-start # 安装依赖并运行
$ npm install && npm start
二、关于<webview> 标签 的使用
<webview> 标签 可以把一个第三方页面嵌入到你的应用中,在一个最简单的 webview 中,它包含了 web page 的文件路径和一个控制 webview 容器展示效果的css样式:
<webview id="foo" src="https://www.github.com/" style="display:inline-block; width:640px; height:480px"></webview>
如何获取 <webview></webview> 标签嵌入第三方网页的DOM元素
1、在 <webview> 标签 内使用 preload 属性指定声明该标签的js文件
<webview src="https://wx2.qq.com/?&lang=zh_CN" autosize="on" minwidth="576" min-height="800" id="foo" preload="./inject.js"></webview>
2、定义<webview> 标签声明的js文件内容,是一个大的对象
inject.js文件:
webViewFunction = {
getDom:function(){
var a = document.getElementById('chatRoomMember.html')
console.log(a)
}
}
3、在渲染进程js文件中调用, 调用的方式必须为对象形式
onload = function(){
var webview = document.getElementById('foo'); // 找到页面上的webview对象
webview.addEventListener("dom-ready", function(){
// 打开webview 的调试窗口
webview.openDevTools()
webview.executeJavaScript('webViewFunction.getDom()') // 调用webview里的方法
});
}
如何调用 <webview> 标签的各个方法:必须在webview加载完之后调用
获取到页面上的<webview> 标签对象,在<webview> 标签加载完成之后进行调用
var webview = document.getElementById('foo'); // 找到页面上的webview对象
webview.addEventListener("dom-ready", function(){
// 打开webview 的调试窗口
webview.openDevTools()
console.log(webview.getURL()) // 获得webview 的URl
});
关于 <webview>.loadURL(url[, options]) 方法:重新载入一个新的url
如何绑定<webview> 标签的各个DOM事件:
获取到页面上的<webview> 标签对象,使用 addEventListener 进行绑定事件
onload = function(){
var webview = document.getElementById('foo'); // 找到页面上的webview对象
webview.addEventListener("dom-ready", function(){ // 绑定加载完后事件
webview.openDevTools()
});
webview.addEventListener("did-stop-loading", function(){ // 绑定加载结束时的事件
console.log('载入结束')
});
webview.addEventListener("did-start-loading", function(){ // 绑定开始载入时事件
console.log('开始载入')
})
}
三、主进程和渲染进程之间的通讯
const {ipcMain} = require('electron')
ipcMain.on('send',function(event, data){ // 使用 ipcMain 模块接收渲染进程发射的事件
console.log(data)
event.sender.send('reply', '接收到事件后进行回复') // 发射回复事件
})
const {ipcRenderer} = require('electron')
ipcRenderer.send('send','发送数据') // 使用 ipcRenderer 模块,发送事件给主进程
ipcRenderer.on('reply', (event, data) => { // 接收主进程的回复事件
console.log('主进程回复过来的数据'+data)
})
四、两个渲染进程之间的通讯方法
在两个网页(渲染进程)间共享数据最简单的方法是使用浏览器中已经实现的 HTML5 API,比较好的方案是用 Storage API, localStorage,sessionStorage 或者 IndexedDB。
还可以用 Electron 内的 IPC 机制实现。将数据存在主进程的某个全局变量中,然后在多个渲染进程中使用 remote 模块来访问它
// 在主进程中
global.sharedObject = {
someProperty: 'default value'
};
// 在第一个页面中
require('remote').getGlobal('sharedObject').someProperty = 'new value';
// 在第二个页面中
console.log(require('remote').getGlobal('sharedObject').someProperty);
五、在主进程main.js文件中可使用的模块
app 模块: 控制整个应用的生命周期设计
autoUpdater 模块: 自动更新应用
BrowserWindow 模块: 创建一个浏览器窗口
contentTracing 模块: 收集由底层的Chromium content 模块 产生的搜索数据
dialog 模块: 提供一个弹出框或者文件选择框
globalShortcut 模块: 注册全局的自定义快捷键
ipcMain 模块: 提供主进程和渲染进程之间的通讯方法,接收渲染进程发射过来的事件和数据并进行回复
menu 模块: 创建鼠标右键显示菜单,跟 menuItem模块 配合使用,可以通过 remote 模块给渲染进程调用.
powerSaveBlocker 模块: 阻止应用系统进入睡眠模式,允许应用保持系统和屏幕继续工作
session 模块: 创建一个新的 Session 对象. 可为应用创建多个Cookie文件夹存储不同的数据信息,并且不会相互影响,各自独立
webContents模块 : 是一个 事件发出者,负责渲染并控制网页,也是 BrowserWindow 对象的属性. 可设置打开调试窗口等
六、在渲染进程中可使用的模块
desktopCapturer 模块: 获取可用资源,这个资源可通过 getUserMedia 捕获得到.
ipcRenderer 模块: 提供渲染进程个主进程之间的通讯方法,可以从渲染进程向主进程发送同步或异步消息. 也可以收到主进程的相应.
remote 模块: 使渲染进程可以调用主进程的模块
webFrame 模块: 自定义如何渲染当前网页
七、两个进程间都可以使用的模块
clipboard 模块: 提供方法来供复制和粘贴操作
crashReporter 模块 : 开启发送应用崩溃报告,自动提交崩溃报告给服务器
nativeImage 模块: 图片对象,从剪切板中读取图片,它返回的是 nativeImage
screen 模块 : 屏幕的 size,显示,鼠标位置等的信息. 即可根据用户显示器大小等信息进行渲染页面
shell 模块 : 提供了集成其他桌面客户端的关联功能,比如调用用户默认浏览器打开一个新窗口等
相关文档链接参考:https://www.w3cschool.cn/electronmanual/electronmanual-electron-faq.html
electron 学习笔记的更多相关文章
- Electron学习笔记(一)
Electron是使用Javascript.HTML5技术构建跨平台桌面应用的技术,是目前非常活跃的一项技术,其中比较有名气的应用有微软的VS Code. 创建一个Electron应用的方式有很多,G ...
- 关于Markdown的一些学习笔记
**关于Markdown的一些学习笔记** 一直利用markdown进行博客的文档编写,一方面是因为不需要特别注重排版,另一方面是十分的方便.最近突发奇想的认为,如果能运用到平时的作业或课程中,会不会 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
随机推荐
- java juint框架的windows自动化-自动运行juint程序简述
在京东混了一个月,基本有点稳定了,觉得也有所余力了现在,继续写博客吧,不过以后更新也许不是那么频繁了 本人使用的是juint框架,对开发是一个单元测试的java框架,但是对测试而言是java的基石之一 ...
- Head First设计模式之迭代器模式
一.定义 提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示: 主要解决:不同的方式来遍历整个整合对象. 何时使用:遍历一个聚合对象. 如何解决:把在元素之间游走的责任交给迭代 ...
- JS 详解 Cookie、 LocalStorage 与 SessionStorage
基本概念 Cookie Cookie 是小甜饼的意思.顾名思义,cookie 确实非常小,它的大小限制为4KB左右.它的主要用途有保存登录信息,比如你登录某个网站市场可以看到"记住密码&qu ...
- video 在微信中,安卓全屏和ios上如何内联播放?H5同层播放器相关接入规范
今天在做一个分享页面的时候需要播放视屏用了video,然后各种坑开始了: <video src="http://xxx.mp4 " id="myVideo" ...
- Python进阶内容(六)--- 函数式编程
斐波那契数列(Fibonacci)的递归与非递归实现 费波那契数列由0和1开始,之后的数就由之前的两数相加 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
- ETL实践--kettle转到hive
ETL实践--kettle只做源数据的抽取,其他数据转换转到hive上. 1.用hive代替kettle的数据关联的原因 (1).公司之前的数据ELT大量使用了kettle.用kettle导原始数据速 ...
- C# Main函数详解
2018-01-15 22:10:59 一.Main()方法的简介 1.唯一性.一般情况下,一个C#可执行程序只有一个Main函数,作为程序入口.但是在某些情况(如单元测试中),程序拥有多个Main ...
- ionic serve 突然报错 node-sass
正常打开项目,并开启浏览器测试模式: 执行命令: ionic serve: 结果报错: 解决方法: 你可以按照 里面的提示: 直接执行命令: npm rebuild node-sass 然后再重新执 ...
- [整理]vimtutor章节小结
第一讲小结 1. 光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl 字母键. h (左移) j (下行) k (上行) l (右移) 2. 欲进入 Vim 编辑器(从命令行提示符),请输入: ...
- 记录WEUI中滚动加载的一个BUG
最近写微信公众号,用到的技术栈是jq+vue的混合开发,采用的UI是移动端比较火的WEUI,在微信开发中应该较广泛.个人看惯了elementUI文档,相对于饿了么组件文档的详细,WEUI的文档还是比较 ...