# h5storage
**Repository Path**: web/h5storage
## Basic Information
- **Project Name**: h5storage
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-13
- **Last Updated**: 2026-08-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# H5Storage
多浏览器存储统一封装库,支持 **IndexedDB / localStorage / sessionStorage / Cookie**。
一套统一API,内部自动处理JSON序列化,可随时切换存储驱动,专为浏览器环境使用。
> ⚠️ **重要提醒**
> 1. IndexedDB 在 `file://` 本地文件协议会被浏览器安全策略禁用,会报错。**必须通过 HTTP 服务访问**(VSCode Live Server、Nginx等)。
> 2. file协议下除 indexedDB 外,localStorage / sessionStorage / cookie 均可正常工作。
## 项目文件结构
```
├─ h5storage.js # UMD库源码,浏览器script直接引入,Node可require,无ESModule语法
├─ index.html # 可视化演示页面
├─ test.html # 精简测试文件
├─ minifun.html # 单函数版本(精简,仅支持localStorage / sessionStorage / Cookie)
└─ README.md # 使用文档
```
## 快速引入
### 方式1:浏览器 script 标签(普通网页)
```html
```
### 方式2:Node.js CommonJS
> 仅可导入类,Node环境没有浏览器存储API,不能实际读写数据
```javascript
const H5Storage = require('./h5storage.js');
```
### 方式3:Vite / Webpack 打包项目使用
本文件不含 `export`,打包环境使用全局方式引入:
```javascript
import './h5storage.js';
const store = new window.H5Storage({ driver: "local" });
```
## API文档
### 实例初始化
```javascript
const store = new H5Storage({
driver: "indexedDB", // 默认存储驱动
cookieExpireDays: 7, // cookie默认过期天数
dbName: "H5StorageDB", // indexedDB数据库名
storeName: "store" // indexedDB仓库名
});
```
### 基础方法
#### set(key, value, [overrideOpts]) 设置数据
- `overrideOpts`:临时覆盖实例配置,可以临时切换驱动
- indexedDB 返回 Promise;local / session / cookie 直接返回布尔值
```javascript
// 使用实例默认驱动
store.set("username","张三");
// 临时切换驱动为sessionStorage
store.set("tempData",[1,2,3],{driver:"session"});
// indexedDB异步,需要await或.then
store.set("bigData",{list:[1,2,3]},{driver:"indexedDB"})
.then(res=>console.log(res));
```
#### get(key, [overrideOpts]) 读取数据
```javascript
//同步驱动
const name = store.get("username");
// indexedDB异步
store.get("bigData",{driver:"indexedDB"}).then(val=>console.log(val));
```
#### remove(key, [overrideOpts]) 删除数据
```javascript
store.remove("username");
```
#### storage(key, value, [overrideOpts]) 底层主方法
- `storage(key)` → 读取
- `storage(key, value)` →写入
- `storage(key, null)` →删除
```javascript
store.storage("foo","bar"); //写入
store.storage("foo"); //读取
store.storage("foo",null); //删除
```
## 四种驱动对比
|驱动|特性|返回值|大小限制|
|---|---|---|---|
|`indexedDB`|异步大容量存储|Promise|几MB~几十MB|
|`local`(localStorage)|同步持久化|boolean|约5MB|
|`session`(sessionStorage)|会话级,关闭标签丢失|boolean|约5MB|
|`cookie`|可传给后端,容量小|boolean|4KB以内|
## 演示页面说明
打开 `index.html`,强烈建议使用 Live Server 启动 http 服务。
功能:
1. 自定义key、value,选择驱动进行增删查操作
2. **全部驱动一轮读写测试**:依次循环测试4种存储
> 注意:file协议打开时 indexedDB 会失败,每个驱动有独立异常捕获,不会中断后续测试,错误信息打印在页面日志和控制台。
## 异步异常处理示例
indexedDB全部操作是异步,务必捕获Promise异常:
```javascript
async function demo(){
try {
await store.set("key1",{a:1},{driver:"indexedDB"});
const data = await store.get("key1",{driver:"indexedDB"});
console.log(data);
}catch(err){
console.error("存储出错",err);
}
}
demo();
```
## 常见问题
### Q1:点击全部驱动测试,运行到indexedDB就卡住不动
旧版本未做单驱动异常捕获,一个驱动报错会中断整个循环。
> 当前版本每个驱动循环内部有独立 try‑catch,indexedDB失败后打印错误,继续执行 local / session / cookie。
### Q2:Uncaught SyntaxError: Unexpected token 'export'
本库已经移除 `export / import.meta`,直接普通 `