上一篇
html5离线存储怎么使用
- 行业动态
- 2025-05-05
- 1
HTML5离线存储可通过
localStorage
或 IndexedDB
实现, localStorage
用 setItem/getItem
存取字符串数据,如 localStorage.setItem('key', 'value')
; IndexedDB
通过异步API操作结构化数据,需创建数据库、事务和对象仓库,两者均支持持久化存储,无需网络连接即可读取
HTML5离线存储使用指南
LocalStorage与SessionStorage基础
HTML5提供两种本地存储方式:localStorage
(持久存储)和sessionStorage
(会话存储),两者均以键值对形式存储数据,但生命周期不同。
特性 | localStorage | sessionStorage |
---|---|---|
生命周期 | 永久存储(除非手动清除) | 窗口关闭时自动清除 |
数据范围 | 同源下所有页面共享 | 仅当前标签页/窗口内共享 |
存储容量 | 约5MB(浏览器限制) | 约5MB(浏览器限制) |
数据类型 | 仅支持字符串(需序列化对象) | 仅支持字符串(需序列化对象) |
操作方法
LocalStorage API
// 存储数据 localStorage.setItem('key', 'value'); // 字符串直接存储 localStorage.setItem('user', JSON.stringify({name: '张三', age: 20})); // 对象需序列化 // 读取数据 const value = localStorage.getItem('key'); // 返回字符串或null const user = JSON.parse(localStorage.getItem('user')); // 反序列化对象 // 删除指定数据 localStorage.removeItem('key'); // 清空所有数据 localStorage.clear();
SessionStorage API
// 存储数据(仅当前页面有效) sessionStorage.setItem('tempData', 'test'); // 读取数据 const temp = sessionStorage.getItem('tempData'); // 删除数据 sessionStorage.removeItem('tempData');
典型应用场景
用户偏好设置
将用户界面配置(如主题、语言)存入localStorage
,下次访问自动加载。// 保存主题设置 localStorage.setItem('theme', 'dark');
表单数据暂存
用户填写表单时实时保存到sessionStorage
,防止意外刷新丢失数据。// 监听输入框变化 input.addEventListener('input', () => { sessionStorage.setItem('formData', input.value); });
购物车功能
使用localStorage
存储商品ID数组,实现页面刷新后购物车状态保留。// 添加商品到购物车 const cart = JSON.parse(localStorage.getItem('cart')) || []; cart.push(productId); localStorage.setItem('cart', JSON.stringify(cart));
注意事项
- 数据类型限制:所有值均以字符串形式存储,需用
JSON.stringify()
和JSON.parse()
处理对象。 - 安全风险:存储敏感信息(如密码)存在安全隐患,建议加密后存储。
- 浏览器兼容性:IE8+支持,移动端主流浏览器均兼容。
- 存储空间:多数浏览器限制为5MB,避免存储大文件(如图片、视频)。
相关问题与解答
问题1:如何实现带过期时间的本地存储?
答:localStorage
本身不支持过期时间,需通过以下方式模拟:
const saveWithExpiry = (key, value, ttl) => { const expiry = Date.now() + ttl; // ttl单位毫秒 localStorage.setItem(key, JSON.stringify({ value, expiry })); }; const getWithExpiry = (key) => { const data = JSON.parse(localStorage.getItem(key)); if (data && Date.now() < data.expiry) { return data.value; } else { localStorage.removeItem(key); return null; } };
问题2:SessionStorage在多标签页中的行为是怎样的?
答:sessionStorage
数据仅在创建它的标签页/窗口内有效。
- 在标签页A中存储
sessionStorage.setItem('page', 1)
- 在标签页B中执行
sessionStorage.getItem('page')
会返回null
- 关闭标签页A后,其存储的数据自动消失