删除所有indexedDB

时间:2017-09-04 15:16:42

标签: javascript indexeddb

我需要删除我目前拥有的所有IndexedDB:

const indexedDB = window.indexedDB || window.mozIndexedDB
  || window.webkitIndexedDB || window.msIndexedDB;
if (indexedDB.webkitGetDatabaseNames) {
  const bases = indexedDB.webkitGetDatabaseNames();
  bases.onsuccess = (event) => {
    const data = event.target.result;
    Object.values(data).forEach((db) => {
      indexedDB.deleteDatabase(db);
    });
    resolve();
  };
  bases.onerror = reject;
}

webkitGetDatabaseNames()函数未定义。 是否可以在不使用此方法的情况下删除所有IndexedDB?

PD:我想在不知道IndexedDB名称的情况下删除,我需要从代码中删除(Javascript)

3 个答案:

答案 0 :(得分:4)

取消了获取名称indexedDB.webkitGetDatabaseNames的函数调用。 请参阅以下参考资料:

https://github.com/dfahlander/Dexie.js/issues/532

也意图弃用:IDBFactory webkitGetDatabaseNames

https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/2fUr-3wFPKI/discussion

您可以使用以下技术删除数据库:

Technique 1:

据我所知,应该使用indexedDB.deleteDatabase

var req = indexedDB.deleteDatabase(databaseName);
req.onsuccess = function () {
    console.log("Deleted database successfully");
};
req.onerror = function () {
    console.log("Couldn't delete database");
};
req.onblocked = function () {
    console.log("Couldn't delete database due to the operation being blocked");
};

我可以确认它适用于PhantomJS 1.9.0和Chrome 26.0.1410.43。

Technique 2

理论上,您在Chrome中删除IndexedDB所需要做的就是:

  1. 在Chrome中,转到选项>在引擎盖下>内容设置>所有Cookie和网站数据>找到您创建IndexedDB的域
  2. 点击" X"或点击"索引数据库" >删除
  3. 在Windows中,该文件位于此处:

    %USERPROFILE%\AppData\Local\Google\Chrome\User Data\Default\IndexedDB

    在Mac上,执行以下操作:

    1. 在Chrome中,转到"设置" (或"首选项"在Chrome菜单下)
    2. 点击"显示高级设置" (在页面底部)
    3. 转到"隐私" > "内容设置" > "所有Cookie和网站数据" >找到您创建IndexedDB的域
    4. 点击" X"或点击"索引数据库" >删除
    5. 在Mac上,该文件夹位于:

      /Users/[USERNAME]/Library/Application Support/Google/Chrome/Default/IndexedDB/
      

      在Linux上,该文件夹位于:

      /home/[USERNAME]/.config/google-chrome/Default/IndexedDB/
      

答案 1 :(得分:1)

在chrome上使用

window.indexedDB.databases().then((r) => {
    for (var i = 0; i < r.length; i++) window.indexedDB.deleteDatabase(r[i].name);
}).then(() => {
    alert('All data cleared.');
});

答案 2 :(得分:0)

indexedDB.databases().then(dbs => {
    var promises = dbs.map(db => {
        return new Promise((resolve, reject) => {
            var req = indexedDB.deleteDatabase(db.Name);
            req.onsuccess = resolve;
            req.onerror = reject;
            req.onblocked = reject;
        });
    });
    Promise.all(promises).then(console.log).catch(console.error);
})