IE11/Edge 中的 IndexedDB:为什么 objStore.autoIncrement 未定义?
IndexedDB in IE11/Edge: why is objStore.autoIncrement undefined?
我正在尝试通过 运行 SauceLabs 中的 sklad 库来修复 Internet Explorer 中失败的测试。不幸的是,我发现对象存储的 autoIncrement 属性 总是未定义的,但我找不到任何证据表明这个 属性 在 IE 中被破坏了。还是我漏了?
var sDBName = "ADatabase" + Date.now();
var nDBVersion = 1.0;
var req = indexedDB.open( sDBName, nDBVersion );
req.onsuccess = function(evt) {
var tr = evt.target.result.transaction(['MyObjectStore'], 'readwrite'); // reaonly
tr.oncomplete = function () {
console.log('transaction completed')
}
var objStore = tr.objectStore('MyObjectStore');
console.log('objStore', objStore);
// expect to get true, but it's undefined
console.log('objStore.autoIncrement', objStore.autoIncrement);
console.log('objStore.keyPath', objStore.keyPath);
}
req.onupgradeneeded = function(evt) {
console.log('upgradeneeded')
var hDBHandle = evt.target.result;
var sStoreName = "MyObjectStore";
var oDBOptions = { keyPath : "RecordID", autoIncrement : true };
var oStore = hDBHandle.createObjectStore( sStoreName, oDBOptions );
var oIxOptions = { unique: false, multientry: false };
oStore.createIndex( "SortByTitle", "DeckTitle", oIxOptions );
oStore.createIndex( "SortByDesc", "Description", oIxOptions );
console.log('upgraded')
}
坏消息:这是一个错误,已在 Microsoft 错误跟踪器中关闭:https://connect.microsoft.com/IE/Feedback/Details/772726
好消息:您可以像我一样为此 属性 编写一个 polyfill (link)。这个想法是检查 autoIncrement 是否未定义。如果它未定义,您应该启动一个 read/write 事务,将数据添加到对象存储。根据 response/exceptions 你可以了解这个对象库是否有 true 或 false autoIncrement 字段。当然你应该事后回滚这个事务。
如果您不想使用所有这些东西,我为您编写了一个库:link
我正在尝试通过 运行 SauceLabs 中的 sklad 库来修复 Internet Explorer 中失败的测试。不幸的是,我发现对象存储的 autoIncrement 属性 总是未定义的,但我找不到任何证据表明这个 属性 在 IE 中被破坏了。还是我漏了?
var sDBName = "ADatabase" + Date.now();
var nDBVersion = 1.0;
var req = indexedDB.open( sDBName, nDBVersion );
req.onsuccess = function(evt) {
var tr = evt.target.result.transaction(['MyObjectStore'], 'readwrite'); // reaonly
tr.oncomplete = function () {
console.log('transaction completed')
}
var objStore = tr.objectStore('MyObjectStore');
console.log('objStore', objStore);
// expect to get true, but it's undefined
console.log('objStore.autoIncrement', objStore.autoIncrement);
console.log('objStore.keyPath', objStore.keyPath);
}
req.onupgradeneeded = function(evt) {
console.log('upgradeneeded')
var hDBHandle = evt.target.result;
var sStoreName = "MyObjectStore";
var oDBOptions = { keyPath : "RecordID", autoIncrement : true };
var oStore = hDBHandle.createObjectStore( sStoreName, oDBOptions );
var oIxOptions = { unique: false, multientry: false };
oStore.createIndex( "SortByTitle", "DeckTitle", oIxOptions );
oStore.createIndex( "SortByDesc", "Description", oIxOptions );
console.log('upgraded')
}
坏消息:这是一个错误,已在 Microsoft 错误跟踪器中关闭:https://connect.microsoft.com/IE/Feedback/Details/772726
好消息:您可以像我一样为此 属性 编写一个 polyfill (link)。这个想法是检查 autoIncrement 是否未定义。如果它未定义,您应该启动一个 read/write 事务,将数据添加到对象存储。根据 response/exceptions 你可以了解这个对象库是否有 true 或 false autoIncrement 字段。当然你应该事后回滚这个事务。
如果您不想使用所有这些东西,我为您编写了一个库:link