网页可以通过以下几种方法在本地记录数据:
document.cookie = "username=JohnDoe; expires=Fri, 31 Dec 2025 23:59:59 GMT; path=/";
localStorage.setItem("username", "JohnDoe");
console.log(localStorage.getItem("username")); // "JohnDoe"
JSON.stringify 转换)。sessionStorage.setItem("sessionID", "12345");
console.log(sessionStorage.getItem("sessionID")); // "12345"
let request = indexedDB.open("MyDatabase", 1);
request.onsuccess = function(event) {
let db = event.target.result;
let transaction = db.transaction(["users"], "readwrite");
let store = transaction.objectStore("users");
store.add({ id: 1, name: "JohnDoe" });
};
Promises 或 async/await)。let input = document.createElement("input");
input.type = "file";
input.onchange = function(event) {
let file = event.target.files[0];
let reader = new FileReader();
reader.onload = function(e) {
console.log(e.target.result); // 文件内容
};
reader.readAsText(file);
};
document.body.appendChild(input);
caches.open("my-cache").then(cache => {
cache.add("/images/logo.png");
});
navigator.serviceWorker.register("/sw.js").then(reg => {
console.log("Service Worker registered");
});
| 方法 | 存储大小 | 持久性 | 适用场景 |
|---|---|---|---|
| Cookies | ~4KB | 长期 | 用户会话管理、追踪 |
| LocalStorage | 5MB+ | 长期 | 用户偏好设置 |
| SessionStorage | 5MB+ | 短期 | 页面临时数据 |
| IndexedDB | 100MB+ | 长期 | 大型数据存储 |
| File API | 取决于文件大小 | 取决于用户 | 处理用户上传/下载文件 |
| Cache API | 依赖浏览器 | 取决于策略 | 离线资源存储 |
| Service Workers | 依赖存储 | 取决于网络 | PWA、后台同步 |
如果需要持久化存储大量数据,推荐 IndexedDB;如果是简单的键值对存储,推荐 LocalStorage;如果是临时存储(会话级别),推荐 SessionStorage。