Обнаружение доступного хранилища с помощью IndexedDB
Я написал автономное приложение, которое использует IDB для хранения изображений и текста, которые обычно существуют в базе данных MySQL для автономного использования.
Однако я пытаюсь выяснить способ, которым я могу прочитать ограничение на хранилище устройств для IndexedDB. В настоящее время я использую следующий метод для определения этого, хотя он работает только в Chrome.
Я использую фрагмент отсюда qaru.site/info/200389/..., который получает storageInfo
для WebKit, однако, если кто-то знает способ получить его на FF и IE и более конкретно Safari, что было бы здорово.
Из того, что я собрал, возвращается используемая квота для всего, что хранится в этом браузере для домена, а не только для IDB. Однако то, что я использую, - это остаточная квота. Из этого я либо выполняю запрос AJAX на сервер, чтобы получить оценочный размер всех файлов, которые будут храниться и работать, если есть достаточное количество хранилища, или я буду рассчитывать сумму, хранящуюся в IDB, и работать, если этого достаточно для магазин больше.
Мне было интересно, есть ли у кого-то более "обтекаемый" подход? И способ проверить остаточную квоту в FF/IE и особенно Safari и даже способ проверки квоты для IDB специально.
Ответы
Ответ 1
Единственный API, доступный в настоящее время и только для хром, - navigator.webkitTemporaryStorage.queryUsageAndQuota()
.
Firefox имел планы для реализации этого API тоже.
Существуют также два экспериментальных API navigator.storageQuota.queryInfo(type)
и navigator.storage.estimate()
, если вы используете chrome с --enable-experimental-web-platform-features
. Подробнее здесь: https://groups.google.com/a/chromium.org/forum/#!searchin/blink-dev/quota-api/blink-dev/P6eY26vB91c/Ri4ohXOPBQAJ
Я думаю, что наиболее интересным является API квоты на хранение(). Это еще черновик, но chrome и mozilla в настоящее время реализует этот API.
К сожалению, в настоящее время нет общедоступной информации, если и Edge, и Safari будет реализовывать этот API.
В настоящее время Edge имеет совсем другую модель для квоты - а не предел целого происхождения, каждый тип хранилища (индексированный db, локальное хранилище и т.д.) имеет собственный предел.
Обновление: Эта функция была добавлена в Chrome 52 (экспериментальный флаг) и Firefox 51 (ночной)
navigator.storage.estimate().then((data)=>console.log(data)) // Object { quota: 2147483648, usage: 0 }