Edge浏览器IndexedDB的.getAll与.get方法兼容性问题求助
解决Edge浏览器中IndexedDB的
getAll和get方法兼容性问题 我之前也踩过老Edge浏览器里IndexedDB的兼容性坑,结合实际开发经验给你几个可行的解决方案:
1. 替代不支持的getAll方法
老Edge(EdgeHTML内核版本)并不支持IDBObjectStore.getAll()这个较新的API,你可以用游标(IDBCursor)来模拟实现相同的功能:
// 自定义getAll替代函数,返回Promise function getAllFromStore(objectStore) { return new Promise((resolve, reject) => { const dataList = []; const cursorRequest = objectStore.openCursor(); cursorRequest.onsuccess = (event) => { const cursor = event.target.result; if (cursor) { dataList.push(cursor.value); cursor.continue(); // 继续遍历下一条数据 } else { resolve(dataList); // 遍历完成,返回所有数据 } }; cursorRequest.onerror = (event) => { reject(event.target.error || new Error('获取数据失败')); }; }); }
使用时直接传入你的IDBObjectStore实例即可,和原生getAll的调用体验一致。
2. 修复get方法的报错提示
你遇到的Unable to get property 'message' of undefined or null reference错误,大概率不是get方法本身的问题,而是错误处理代码尝试访问了不存在的错误对象的message属性。老Edge中某些情况下event.target.error可能为null或undefined,所以要先做判断:
错误的写法:
const getRequest = objectStore.get(someKey); getRequest.onerror = (event) => { console.log(event.target.error.message); // 当error为null时触发报错 };
修正后的写法:
const getRequest = objectStore.get(someKey); getRequest.onerror = (event) => { const error = event.target.error; if (error) { console.log('获取数据出错:', error.message); } else { console.log('获取数据失败,未知错误'); } };
同时还要确认你调用get方法时:
- 传入的键值格式正确,符合对象仓库的键定义
- 事务的模式正确(读操作需使用
readonly模式)
3. 长远解决方案:升级到Chromium内核Edge
微软已经停止对老EdgeHTML内核浏览器的支持,新的Chromium内核Edge对IndexedDB的支持和Chrome几乎完全一致,能从根源上避免这类兼容性问题,建议引导用户升级浏览器。
内容的提问来源于stack exchange,提问作者Maciej21592
相关产品推荐
相关产品推荐

