IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> electron学习 -> 正文阅读

[JavaScript知识库]electron学习

Electron优缺点

  • 优点
    • 跨平台性好, 界面美观;
    • 前端工程化 + 前端的第三方库(npm) + 前端生态
    • 熟悉的语言(HTML/JS/CSS) + 环境(Node.js)
    • 一次开发三平台可用
  • 缺点:底层交互差,性能差,包大

基础概念

主进程 与 渲染进程

主进程使用BrowserWindow 创建实例
主进程销毁后,对应的渲染进程会被终止
主进程与渲染进程通过IPC方式(事件驱动)进行通信

app 、 ipcMain、ipcRender、remote

  • app 可监听一些app的一些事件
  • ipcMain、ipcRender 通信
  • remote(已废弃)
  • dom元素不可接受

消息通道 Message Port

  • MessagePort是一个允许在不同上下文之间传递消息的Web功能。 就像 window.postMessage, 但是在不同的通道上。可用于iframe间传递
  • const { port1, port2 } = new MessageChannel()
  • port1和port2 就像 通话过程中两端的手机

port的传输,port是在一端创建,是需要把话筒给另一端

  • ipcRenderer.postMessage 的第三个参数
  • mainWindow.webContents.send(${eventName}, args)
  • iframe.contentWindow.postMessage(${eventName}, ‘*’, [channel.port2]);

大概是全网最详细的Electron ipc 讲解(三)——定情信物传声筒port
electron Js中MessagePorts的实际用途是什么?

系统通知

打包

  • 待补充
  • electron-builder

安全

  • 待补充
    BrowserWindow 、preload
    安全

安装

  • 设置 ELECTRON_MIRROR
npm config set registry https://registry.npm.taobao.org/
npm config set ELECTRON_MIRROR http://npm.taobao.org/mirrors/electron/
  • 安装
mkdir my-electron-app && cd my-electron-app
npm init
npm install --save-dev electron

集成

react

  • electron-react-boilerplate
  • vite-electron-react-starter

实操

  • 安装
git clone --depth 1 --branch main https://github.com/electron-react-boilerplate/electron-react-boilerplate.git  your-project-name
npm install
  • 启动
npm start
  • 引入electron-store
npm install electron-store

主进程代码更改

//src\main\preload.ts
import { contextBridge, ipcRenderer, IpcRendererEvent } from 'electron';

export type Channels = 'ipc-example';
//将store挂载到window.electron下,待渲染进程调用
contextBridge.exposeInMainWorld('electron', {
  store: {
    get(key) {
      return ipcRenderer.sendSync('electron-store-get', key);
    },
    set(property, val) {
      ipcRenderer.send('electron-store-set', property, val);
    },
    // Other method you want to add like has(), reset(), etc.
  },
});
//src\main\main.ts
import Store from 'electron-store';

const store = new Store();
// IPC listener
ipcMain.on('electron-store-get', async (event, val) => {
  event.returnValue = store.get(val);
});
ipcMain.on('electron-store-set', async (event, key, val) => {
  store.set(key, val);
});

渲染进程代码更改

//src\renderer\App.tsx
return (
    <div>
      <button
        onClick={() => {
          window.electron.store.set('foo', 'bar');
          // or
          console.log(window.electron.store.get('foo'));
        }}
      >
        Click Me!
      </button>
  );
//src\renderer\preload.d.ts ts声明
declare global {
  interface Window {
    electron: {
      store: {
        get: (key: string) => any;
        set: (key: string, val: any) => void;
        // any other methods you've defined...
      },
    }
  }
}
  • 疑问
    当前引入 electron-store 的实操,既可以知晓全局store的操作过程,也可以知道渲染进程向主进程调用,那么主进程能否主动性和渲染进程进行通信呢?
  • 主进程向渲染进程主动通信
//src\main\main.ts
mainWindow = new BrowserWindow({...});
  mainWindow.on('ready-to-show', () => {
    //用 webContents.send 发送
    mainWindow.webContents.send('toRender', mainWindow.id);
  });
//src\renderer\index.tsx
window.electron.ipcRenderer.on('toRender', (id)=>{
  console.log('render get', id)
});

ncu
tsconfig : noImplicitAny

扫码登录

用户有第三方的账号,直接通过第三方扫描登陆,实现两种方式:

  • Oauth2.0
  • 自定义扫码场景

生成扫码图片的时候,带上系统用户的参数+唯一标识;轮询后端是否已登录

由于没有实际操作过,只能一句话理解附上。

参考

electron官方文档
正确设置 ELECTRON_MIRROR ,加速下载 electron 预编译文件
electron-react-boilerplate官方文档

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:19:29  更:2022-09-21 00:20:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:52:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码