IndexedDB DBOpenRequest事件不触发

biswetbf  于 2022-12-09  发布在  IndexedDB
关注(0)|答案(2)|浏览(178)

下面是我的代码:

var db;

window.onload = function()
{    
  window.indexedDB = window.indexedDB || window.mozIndexedDB 
                                      || window.webkitIndexedDB 
                                      || window.msIndexedDB;

  var DBOpenRequest = window.indexedDB.open("test", 1);
    
  DBOpenRequest.onerror = function(event)
  {
     console.log("DBOpenRequest.onerror");
  };
    
  DBOpenRequest.onsuccess = function(event)
  {
    console.log("DBOpenRequest.onsuccess");
    db = DBOpenRequest.result;
  };
    
  DBOpenRequest.onupgradeneeded = function(event)
  {
    console.log("DBOpenRequest.onupgradeneeded");
  };
};

但没有触发任何事件。除了readyState设置为“done”且结果设置为IDBDatabase对象之外,所有DBOpenRequest属性都设置为null。
这里缺少了什么,所以我可以通过db变量访问indexdb?

ffscu2ro

ffscu2ro1#

1.您不需要等待浏览器触发load事件。indexedDB就绪与DOM就绪无关。您只需indexedDB.open在全局范围内调用www.example.com,它最终就会执行。
1.您可能不需要检查供应商前缀的语句。前缀通常已被删除。只需使用window.indexedDB并删除此语句即可。
1.您还应该侦听blocked事件。此事件通常在同时在多个选项卡中打开同一页面时触发。当被阻止时,其他事件将不会触发。

  1. db = DBOpenRequest.result行似乎正在将一个只在函数作用域内有效的值(IDBDatabase对象的示例)赋给在外部作用域内定义的变量,而在外部作用域内该值不再有效。这表明您缺乏编写和使用异步代码的经验。在继续之前,您可能应该了解更多有关异步代码的信息。
f5emj3cl

f5emj3cl2#

例如,在onsuccess中,db来自事件,而不是原始对象:

db = event.target.result;

最有可能的情况是,您的控制台中出现了此错误。

相关问题