上一篇
html5本地api
- 行业动态
- 2025-05-10
- 9
HTML5本地API包括本地存储(localStorage/IndexedDB)、文件操作(File API)、Web Workers多线程、Canvas绘图及Geolocation定位等,支持离线应用数据持久
HTML5 本地存储 API
LocalStorage
- 用途:长期存储数据,数据持久化,关闭浏览器后仍保留。
- 特点:
- 以键值对形式存储字符串。
- 同一域名下所有页面共享数据。
- 容量约 5~10MB(浏览器依赖)。
- 常用方法:
// 存储数据 localStorage.setItem('key', 'value'); // 读取数据 const value = localStorage.getItem('key'); // 删除单个键值 localStorage.removeItem('key'); // 清空所有数据 localStorage.clear();
SessionStorage
- 用途:短期存储数据,页面会话结束后清除(如标签页关闭)。
- 特点:
- 仅当前页面(标签页)可见,其他页面不可访问。
- 容量与 LocalStorage 类似。
- 常用方法:与 LocalStorage 完全一致,仅作用域不同。
IndexedDB
用途:结构化数据存储,支持复杂查询和大数据量(可达数百MB)。
特点:
- 异步 API,基于事务操作。
- 支持索引、主键、游标等数据库特性。
基本操作:
// 打开数据库 const db = indexedDB.open('dbName'); db.onsuccess = (event) => { const db = event.target.result; // 创建事务 const transaction = db.transaction(['objectStoreName'], 'readwrite'); // 操作对象仓库 const store = transaction.objectStore('objectStoreName'); store.add({ key: 'value' }); // 添加数据 };
File API
- 用途:处理本地文件(读取、写入、切片等)。
- 核心功能:
FileReader
:读取文件内容(文本、二进制、DataURL)。Blob
:生成二进制数据对象。
- 示例:
// 读取文件 const fileInput = document.querySelector('input[type="file"]'); fileInput.onchange = (event) => { const file = event.target.files[0]; const reader = new FileReader(); reader.onload = () => console.log(reader.result); // 文件内容 reader.readAsText(file); };
本地存储 API 对比表
特性 | LocalStorage | SessionStorage | IndexedDB | File API |
---|---|---|---|---|
数据持久性 | 长期(手动清除) | 短期(会话结束) | 长期 | 临时(文件关闭) |
数据类型 | 字符串(键值对) | 字符串(键值对) | 结构化(JSON/二进制) | 二进制/文本 |
容量限制 | 5~10MB | 5~10MB | 数百MB~2GB | 无固定限制 |
作用域 | 同域名所有页面 | 当前标签页 | 同域名所有页面 | 用户选择的文件 |
API 复杂度 | 简单(同步) | 简单(同步) | 复杂(异步) | 中等 |
相关问题与解答
问题 1:如何选择 LocalStorage、SessionStorage 或 IndexedDB?
- 解答:
- 简单键值对且需长期保存:选 LocalStorage(如用户偏好设置)。
- 临时数据且仅当前页面使用:选 SessionStorage(如表单临时草稿)。
- 复杂数据结构或大容量存储:选 IndexedDB(如离线应用数据库)。
问题 2:IndexedDB 操作为何需要异步处理?
- 解答:
IndexedDB 设计为异步 API,避免阻塞主线程,其操作(如增删改查)依赖事务和事件回调(onsuccess
/onerror
),确保高性能和响应式体验,尤其适合处理大量