如何在Internet Explorer 11中成功连接IndexedDB?
在IE11中正确使用IndexedDB的解决方案
针对你在IE11中使用IndexedDB遇到的问题,需要修改以下几个关键地方:
- 补充IE专属的IndexedDB前缀:IE11的IndexedDB实现使用
msIndexedDB前缀,你的代码中缺少这个判断,导致无法正确获取到IndexedDB对象。 - 替换箭头函数:IE11不支持ES6箭头语法,
onerror回调里的箭头函数会引发语法错误,需要改为普通函数。 - 完善
onupgradeneeded逻辑:IE11要求在数据库版本升级时必须创建至少一个对象仓库(Object Store),否则可能触发异常。 - 替换ES6变量声明:IE11对
let/const的支持不完善,需统一改用var声明变量。
修正后的完整代码如下:
var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.msIndexedDB; if(indexedDB) { var request = indexedDB.open("library", 1); var db; request.onupgradeneeded = function(event) { console.log("Upgrade"); // 必须创建至少一个对象仓库,否则IE11会报错 db = event.target.result; if (!db.objectStoreNames.contains('books')) { db.createObjectStore('books', { keyPath: 'id' }); } }; request.onsuccess = function() { db = request.result; console.log(db); }; request.onerror = function(event) { console.log('error: ', event); }; }
额外注意:IE11的IndexedDB功能有限,不支持部分现代IndexedDB特性(如索引的多键路径、批量操作的某些用法),如果涉及复杂操作需要额外做兼容性处理。
内容的提问来源于stack exchange,提问作者Kirill
相关产品推荐
相关产品推荐

