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