You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:11:30