Electron学习笔记(四)

文章目录

      • 相关笔记
      • 笔记说明
    • 六、数据
      • 1、使用本地文件持久化数据
        • (1) 用户数据目录
        • (2) 读写本地文件
        • (3) 第三方库
      • 2、读写受限访问的 Cookie
      • 3、清空浏览器缓存

相关笔记

  • Electron学习笔记(一)
  • Electron学习笔记(二)
  • Electron学习笔记(三)
  • Electron学习笔记(四)
  • Electron学习笔记(五)
  • Electron学习笔记(六)
  • 使用 electron-vite-vue 构建 electron + vue3 项目并打包

笔记说明

文本为学习《Electron 实战 入门、进阶与性能优化 刘晓伦 著》时所记录的笔记 主要将书本上的案例运行一遍,针对原理部分并无相关记录。笔记记录于 2023年9月。

六、数据

1、使用本地文件持久化数据

(1) 用户数据目录

src/background.js 文件内进行测试:

console.log(app.getPath('appData')); // C:\Users\asus\AppData\Roaming
console.log(app.getPath('userData')); // C:\Users\asus\AppData\Roaming\electron_basic04 (此处为 Windows 系统)
console.log(app.getPath('home')); // C:\Users\asus
console.log(app.getPath('desktop')); // D:\桌面

参数说明:

appData:应用程序用户个性化数据目录。

userData:根据操作系统返回具体的用户个性化数据存储目录。

home:用户的根目录。

其他参数:documentsdownloadspicturesmusictempexe

重置用户数据目录:

console.log(app.getPath('appData')); // 修改前:C:\Users\asus\AppData\Roaming// 重置用户数据目录(参数一:要重置的路径的名称,参数二:具体的路径)
app.setPath('appData','D:\\桌面')console.log(app.getPath('appData')); // 修改后:D:\桌面
(2) 读写本地文件

保存用户数据到磁盘:(此处创建了一个名为 test.txt 的文件,文件内容为 abc)

let fs = require("fs-extra");
let path = require("path");
let dataPath = app.getPath("userData");// 写入的文件路径
dataPath = path.join(dataPath, "test.txt");
fs.writeFileSync(dataPath, 'abc', { encoding: 'utf8' })

效果展示:

效果展示

读取文件内容:

let fs = require("fs-extra");
let path = require("path");
let dataPath = app.getPath("userData");dataPath = path.join(dataPath, "test.txt");
let data = fs.readFileSync(dataPath,{ encoding: 'utf8' });
console.log(data); // 读取的文件内容为:abc
(3) 第三方库

lowdb: 可以快速高效地操作数组、JSON对象。

//创建数据访问对象
const low = require('lowdb')
const FileSync = require('lowdb/adapters/FileSync')
const adapter = new FileSync('db.json')
const db = low(adapter)
//查找数据
db.get('posts').find({ id: 1 }).value();
//更新数据
db.get('posts').find({ title: 'low!' }).assign({ title: 'hi!'}).write();
//删除数据
db.get('posts').remove({ title: 'low!' }).write();
//排序数据
db.get('posts').filter({published: true}).sortBy('views').take(5).value();

electron-store: 一个专门为 Electron 设计的,轻量的数据库,支持数据加密,无需指定文件路径可直接将数据保存在用户的 userData 目录下。

const Store = require('electron-store');
const store = new Store();
store.set('key', 'value');
console.log(store.get('key'));            //输出value 
store.set('foo.bar', true);               //可以级联设置JSON对象的值
console.log(store.get('foo'));            //输出 {bar: true}
store.delete('key');
console.log(store.get('unicorn'));        //输出 undefined

2、读写受限访问的 Cookie

访问第三方网页时写入并读取 cookie:

src/background.js 文件核心代码:

const path = require('path');async function createWindow() {const win = new BrowserWindow({width: 800,height: 600,webPreferences: {enableRemoteModule: true,preload: path.join(__static, 'preload.js'),}});win.loadURL('https://www.baidu.com/');win.webContents.openDevTools();
}

public/preload.js 文件内容如下:

const { remote } = require("electron");//获取Cookie
let getCookie = async function (name) {let cookies = awaitremote.session.defaultSession.cookies.get({ name });if (cookies.length > 0) return cookies[0].value;else return '';
}//设置Cookie
let setCookie = async function (cookie) {await remote.session.defaultSession.cookies.set(cookie);
}window.onload = function () {setCookie({url:'https://www.baidu.com/',name: 'xiaom',value: 'abc123'});console.log(getCookie('xiaom'));
}

效果展示:

效果展示


3、清空浏览器缓存

await remote.session.defaultSession.clearStorageData({storages: 'cookies,localstorage'
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/10776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust教程:贪吃蛇游戏(第 2/2 部分)

In this article, we’ll finish the snake.rs file, and also continue with the rest of the files (main.rs, draw.rs, game.rs). 欢迎来到本教程的第二部分,在本文中,我们将完成 snake.rs 文件,并继续处理其余文件(main.rs、d…

数据结构-二叉树-红黑树

一、红黑树的概念 红黑树是一种二叉搜索树,但在每个节点上增加一个存储位表示节点的颜色,可以是Red或者BLACK,通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,…

springcloud整合网关(springcloud-gateway) 跨域处理

pom引入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!-- 服务注册 --><dependency><groupId>com.alibaba.cloud</groupId&…

LC3134. 找出唯一性数组的中位数

3134. 找出唯一性数组的中位数 给你一个整数数组 nums 。数组 nums 的 唯一性数组 是一个按元素从小到大排序的数组&#xff0c;包含了 nums 的所有 非空子数组中 不同元素的个数。 换句话说&#xff0c;这是由所有 0 < i < j < nums.length 的 distinct(nums[i..…

Python 将Excel转换为多种图片格式(PNG, JPG, BMP, SVG)

目录 安装Python Excel库 使用Python将Excel工作表转换为PNG&#xff0c;JPG或BMP图片 使用Python将Excel特定单元格区域转换为PNG&#xff0c;JPG或BMP图片 使用Python将Excel工作表转换为SVG图片 有时&#xff0c;你可能希望以图片形式分享Excel数据&#xff0c;以防止他…

【Python 常用脚本及命令系列 1.3 -- 使用Python实现串口读写】

请阅读【嵌入式开发学习必备专栏】 文章目录 Python实现串口读写注意事项 Python实现串口读写 背景&#xff1a; 需要实现个Python脚本打开串口19并设置波特率为115200然后实现write&#xff08;addr, val&#xff09; 和 read(addr)函数&#xff0c;其中write函数是通过在串口…

vue3使用setup模式的store报错

** setup store模式 $reset方法报错 ** 顾名思义就是 使用store 使用的是setup 语法模式 不能执行$reset 方法 解决方式&#xff1a; // main.ts import { createPinia } from pinia const pinia createPinia() pinia.use(({ store }) > {const initialState JSON.pars…

并行计算的一些知识点分享--并行系统,并行程序, 并发,并行,分布式

并行计算 核是个啥&#xff1f; 在并行计算中&#xff0c;“核”通常指的是处理器的核心&#xff08;CPU核心&#xff09;。每个核心都是一个独立的处理单元&#xff0c;能够执行计算任务。多核处理器指的是拥有多个这样核心的单一物理处理器&#xff0c;这样的设计可以允许多…

美股市场恒生指数冲刺19000点关口 地产股大涨

查查配5月10日电(中新财经记者 谢艺观)5月10日,港股现强势行情,恒生指数盘中一度冲至18993.28点,距离19000点关口仅一步之遥。 美港通证券以其专业的服务和较低的管理费用在市场中受到不少关注。该平台提供了实盘交易、止盈止损、仓位控制等功能,旨在为投资者提供更为全面的投…

.net core WebApi 部署 IIS

安装 IIS 下载需要的 net 版本安装 前往 .net core WebApi 项目打包 Program.cs var builder WebApplication.CreateBuilder(args);// 输出 builder.Services.AddControllers().AddJsonOptions(options > {options.JsonSerializerOptions.PropertyNamingPolicy null;…

怎么做自己的网站

现如今&#xff0c;拥有自己的网站已经成为现代生活中的一种标志。无论是个人博客、在线商店还是企业官网&#xff0c;都可以通过拥有一个网站来展示自己的个性、产品或服务。在这篇文章中&#xff0c;我将分享如何创建和管理自己的网站。 首先&#xff0c;你需要选择一个合适的…

go语言切片slice使用细节和注意事项整理

go语言中切片slice的使用是最为频繁的&#xff0c;效率也是最高的&#xff0c; 今天就给大家说说我们在使用过程中会忽略的一些细节。 先普及一下slice的核心基础知识&#xff0c; go语言中的切片是引用类型&#xff0c; 其底层数据的存储实际上是存储在一个数组 上&#xff08…

unreal engine5.3.2 Quixel bridge无法登陆

UE5系列文章目录 文章目录 UE5系列文章目录前言一、问题定位二、解决方法 前言 这几天unreal engine5.3.2 Quixel bridge无法登陆&#xff0c;输入epic 账号和密码&#xff0c;然后在输入epic发送的验证码&#xff0c;总是提示登录失败。就算是使用科学上网依然无法登录。而且…

Java面试题:阐述Java中的自动装箱与拆箱机制,以及使用它们时可能遇到的性能问题

在Java中&#xff0c;自动装箱&#xff08;Autoboxing&#xff09;和拆箱&#xff08;Unboxing&#xff09;是Java 5引入的特性&#xff0c;它们允许基本数据类型和对应的包装类之间的自动转换。 自动装箱 自动装箱是指将基本数据类型&#xff08;如int、double等&#xff09…

Linux日志管理配置介绍

日志管理 内核日志 服务日志 日志等级 man 8 syslog #define KERN_EMERG “<0>” /* system is unusable / #define KERN_ALERT “<1>” / action must be taken immediately / #define KERN_CRIT “<2>” / critical conditions / #define KERN_ERR “<…

解决 Content type ‘application/json;charset=UTF-8‘ not supported

文章目录 问题描述原因分析解决方案参考资料 问题描述 我项目前端采用vue-elementUi-admin框架进行开发&#xff0c;后端使用SpringBoot&#xff0c;但在前后端登录接口交互时&#xff0c;前端报了如下错误 完整报错信息如下 前端登录接口JS代码如下 export function login(…

出现Duplicate key

解决&#xff1a; 第一种情况&#xff1a; 添加一个字段prjId &#xff0c;和数据库表映射时&#xff0c;映射的字段存在映射关系了。 将第二个 TableField中的prj_num改成prj_id 即可。 第二种情况&#xff1a; 转成map的形式时&#xff1a;key重复了&#xff0c;不知道把值赋…

KAN神经网络简短介绍

KANs简介 Kolmogorov-Arnold Networks (KANs) 是一种创新的神经网络模型&#xff0c;它挑战了传统多层感知器(MLPs)的设计&#xff0c;通过将激活函数从节点转移到边上来提升模型的性能和可解释性。KAN的核心在于&#xff0c;其所有权重参数均被单变量的样条函数代替&#xff…

“数字化叙事的革命:人工智能驱动的创意工具的崛起”

近年来&#xff0c;人工智能 (AI) 改变了我们生活的许多方面&#xff0c;数字故事讲述的世界也不例外。随着人工智能驱动的创意工具的出现&#xff0c;广告商、内容创作者和专业人士现在配备了创新的解决方案来简化他们的工作流程&#xff0c;增强他们的创意输出&#xff0c;并…

vue中使用element的i18n语言转换(保姆式教程-保证能用)

话不多说&#xff0c;先看效果:预览地址: https://sandm00.github.io/i18n-switch/#/ 1、项目中需要使用的插件&#xff0c;vue2或vue3、element、vue-i18n、js-cookie、vuex我是在vue2中使用 npm i element-ui -S npm i js-cookie -S npm i vue-i18n8.28.2 //因为我项目使用…