一、快速搭建一个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('开始载入')
}) }

三、主进程和渲染进程之间的通讯

ipcMain 模块: 在主进程引入,用于接收渲染进程发射的事件和进行回复  
       结构: ipcMain.on ( 接收事件名, callback (事件对象,接收参数) )
 
const {ipcMain} = require('electron')

ipcMain.on('send',function(event, data){   // 使用 ipcMain 模块接收渲染进程发射的事件
console.log(data)
event.sender.send('reply', '接收到事件后进行回复') // 发射回复事件
})
ipcRenderer 模块: 在渲染进程引入,用于发射事件给主进程和接收主进程返回的回复事件
         结构:ipcRenderer.send ( 事件名称,发射的数据)
            ipcRenderer.on ( 回复事件名称,回复的数据)
 
const {ipcRenderer} = require('electron')

ipcRenderer.send('send','发送数据')         // 使用 ipcRenderer 模块,发送事件给主进程
ipcRenderer.on('reply', (event, data) => { // 接收主进程的回复事件
console.log('主进程回复过来的数据'+data)
})

四、两个渲染进程之间的通讯方法

在两个网页(渲染进程)间共享数据最简单的方法是使用浏览器中已经实现的 HTML5 API,比较好的方案是用 Storage API, localStoragesessionStorage 或者 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

         https://electronjs.org/docs

electron 学习笔记的更多相关文章

  1. Electron学习笔记(一)

    Electron是使用Javascript.HTML5技术构建跨平台桌面应用的技术,是目前非常活跃的一项技术,其中比较有名气的应用有微软的VS Code. 创建一个Electron应用的方式有很多,G ...

  2. 关于Markdown的一些学习笔记

    **关于Markdown的一些学习笔记** 一直利用markdown进行博客的文档编写,一方面是因为不需要特别注重排版,另一方面是十分的方便.最近突发奇想的认为,如果能运用到平时的作业或课程中,会不会 ...

  3. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  4. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  5. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  6. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  7. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  8. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  9. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

随机推荐

  1. 快速开发 jQuery 插件的 10 大技巧

    在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了. ...

  2. C#语言和SQL Server 数据库处理

    ---恢复内容开始--- 第七章 用表组织数据 1:数据性分类: 1>实体完整性的约束:检验每行数据是否符合要求 检验每列数据是否符合要求 2>域完整性约束:给定列输入的有效性 3> ...

  3. 理解css伪类和伪元素

    伪类就是可以通过直接添加一个类样式达到同等效果,而伪元素,则需要先添加一个元素,然后在元素上添加样式才能达到同等效果 伪类 :active 向被激活的元素添加样式. :focus 向拥有键盘输入焦点的 ...

  4. php mysql语句预编译(preparestatement)

    预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高. 预处理语句的工作原理如下: 预处理:创建 SQL 语句模板并发送到数据库.预留的值使用参数 "?" 标记 .例如: ...

  5. 第四章:大数据 の HBase 基础

    本课主题 NoSQL 数据库介绍 HBase 基本操作 HBase 集群架构与设计介紹 HBase 与HDFS的关系 HBase 数据拆分和紧缩 引言 介绍什么是 NoSQL,NoSQL 和 RDBM ...

  6. 浅析python中socketserver模块使用

    虽然说用python编写简单的网络程序狠方便,但是复杂一点的网络程序还是用现成的框架比较好,这样就可以专心事物逻辑,而不是套接字的各种细节.Socketserver模块简化了编写网络服务程序,同时so ...

  7. jquery 获取URL相对/绝对路径问题

    在B/s系统中,使用jquery做图片上传时通常会遇到获取不到路径的的问题,这是因为系统不允许浏览器的访问而进行限制造成的, 一般获取到的都是C://Program Files/~/文件位置.而在有时 ...

  8. 推荐一个比HtmlWebpackPlugin更灵活的插件

    插件:html-res-webpack-plugin https://github.com/lcxfs1991/html-res-webpack-plugin/blob/v3/README_ZH.md ...

  9. Spring Boot快速入门(二):http请求

    原文地址:https://lierabbit.cn/articles/4 一.准备 postman:一个接口测试工具 创建一个新工程 选择web 不会的请看Spring Boot快速入门(一):Hel ...

  10. HDFS中namenode启动失败

    1.环境配置: -1.core-site.xml文件 <configuration> <property> <name>fs.defaultFS</name& ...