ReactJS, Redux и DexieJS (IndexedDB) - ошибка в режиме инкогнито и Chrome v69 - PullRequest
0 голосов
/ 14 октября 2018

Я сейчас изучаю ReactJS, и я решил создать простое приложение.

Стек:

  • React
  • Redux
  • React-router
  • DexieJS (IndexedDB)

Приложение работает.Проблема в том, что когда я пытаюсь протестировать его в Firefox или режиме инкогнито (в Chrome), я получаю эту ошибку:

TypeError: Cannot read property 'apply' of undefined enter image description here

Любойзнает, почему я получаю эту ошибку и как я могу справиться с этим?Я обнаружил, что IndexedDB недоступен в Firefox и режиме инкогнито, поэтому я попытался сделать простую проверку:

if(!window.indexedDB) {
 alert('Indexed DB is not supported by your browser. If you are running in incognito mode, please use the normal mode.')
}

Но это не работает, я снова получаю сообщение об ошибке.

Здесьэто репозиторий Github, если вы хотите увидеть весь код: https://github.com/Webd01/BM

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 17 октября 2018

IndexedDB прекрасно работает в режиме инкогнито Chrome, поэтому, если у вас есть проблема, это может быть вызвано чем-то другим.

Но вы правы, что IndexedDB не подходит в режиме частного просмотра Firefox, хотя выошибаетесь конкретно как.window.indexedDB не равно нулю в режиме частного просмотра Firefox, но выдает ошибку на upgradeneeded.Я использую что-то вроде этого, чтобы обнаружить это (также есть некоторые другие проверки совместимости браузера):

var checkIDB = function () {
  if (typeof window.indexedDB === "undefined") {
    console.log("IndexedDB not supported at all!");
    return;
  }

  try {
    keyRange.only([1]);
  } catch (e) {
    console.log("Buggy Microsoft IndexedDB implementation");
    return;
  }

  var openRequest = window.indexedDB.open('firefox-private-test', 1);

  openRequest.onerror = function (evt) {
    console.error(evt.target.error);
    if (evt.target.error.message.includes("aborted")) {
      console.log("Some other error, maybe quota related:");
      console.log(evt.target.error);
    } else {
      console.log("Firefox private mode, probably:");
      console.log(evt.target.error);
    }
  }

  openRequest.onupgradeneeded = function (evt) {
    var db = evt.target.result;
    var one = db.createObjectStore('one', {
      autoIncrement: true,
      keyPath: 'key'
    });
    one.createIndex('one', 'one');
    one.add({one: 1});
    var two = db.createObjectStore('two', {
      autoIncrement: true,
      keyPath: 'key'
    });
    two.createIndex ('two', 'two');
    two.add({two: 2});
  };

  openRequest.onsuccess = function (evt) {
    var db = evt.target.result;
    var transaction;
    try {
      transaction = db.transaction(['one', 'two'], 'readwrite');
    } catch (e) {
      console.log("Some browser failed here, maybe an old version of Safari, I forget");
      console.log(e.target.error);
      return;
    }

    var count = 0;
    transaction.objectStore('one').index('one').openCursor().onsuccess = function (evt) {
      cursor = evt.target.result;
      if (cursor) {
        count += 1;
        cursor.continue();
      }
    };

    transaction.oncomplete = function () {
      db.close();
      if (count === 1) {
        console.log("All good!");
      } else {
        console.log("Buggy Safari 10 IndexedDB implementation")
      }
    };
  };
};
...