Метод supports(driverName) в библиотеке
localForage предназначен для синхронной проверки
доступности конкретного драйвера хранения данных в текущей среде
выполнения. Он используется как механизм feature detection и позволяет
заранее определить, можно ли безопасно использовать
IndexedDB, WebSQL или
localStorage, не инициируя саму инициализацию хранилища и
не создавая побочных эффектов.
В основе localForage лежит абстракция над несколькими
механизмами хранения данных в браузере. Библиотека поддерживает три
основных драйвера:
INDEXEDDBWEBSQLLOCALSTORAGEКаждый из них имеет собственные ограничения, особенности и уровень
поддержки в различных браузерах и окружениях. Метод
supports(driverName) выступает точкой ранней проверки
совместимости, позволяя определить, доступен ли конкретный механизм до
его фактического использования.
Ключевая задача метода — исключить необходимость пробных операций записи/чтения и заменить их детерминированной проверкой возможностей окружения.
Метод имеет синхронную сигнатуру:
localforage.supports(driverName)
Возвращаемое значение:
true — драйвер поддерживается текущим окружениемfalse — драйвер недоступен или отключёнАргумент driverName представляет собой строку или
константу, соответствующую одному из встроенных драйверов.
В стандартной конфигурации localForage используются
следующие идентификаторы:
localforage.supports(localforage.INDEXEDDB)
IndexedDB является основным современным хранилищем в браузерах. Оно поддерживается большинством актуальных браузеров, включая Chrome, Firefox, Edge и Safari (с некоторыми ограничениями в старых версиях).
Особенности проверки:
window.indexedDBlocalforage.supports(localforage.WEBSQL)
WebSQL считается устаревшим стандартом, но всё ещё поддерживается в некоторых WebKit-браузерах.
Проверка включает:
window.openDatabaseВажно учитывать, что WebSQL не поддерживается в Firefox и постепенно удаляется из Chromium-экосистемы.
localforage.supports(localforage.LOCALSTORAGE)
LocalStorage — наиболее универсальный, но ограниченный по возможностям механизм хранения.
Проверка включает:
window.localStorageМетод supports не выполняет асинхронных операций и не
инициирует реальное создание хранилища. Его реализация основана на
feature detection, а не на runtime probing в полном объёме.
Общая логика проверки выглядит следующим образом:
windowВажно, что библиотека может использовать упрощённые проверки без фактической записи данных, если среда явно не поддерживает API.
Метод supports не равен выбору драйвера и не влияет на
текущую конфигурацию localForage.
Сравнение:
Таким образом, supports используется на этапе принятия
решения, а не на этапе применения конфигурации.
if (localforage.supports(localforage.INDEXEDDB)) {
localforage.setDriver(localforage.INDEXEDDB);
} else if (localforage.supports(localforage.WEBSQL)) {
localforage.setDriver(localforage.WEBSQL);
} else {
localforage.setDriver(localforage.LOCALSTORAGE);
}
Такой подход позволяет выстроить ручную стратегию деградации хранилища.
В браузерной среде supports опирается на реальные API
объекта window. Однако поведение может отличаться:
false для
IndexedDBВ среде Node.js localForage обычно не функционирует в
полном объёме, так как отсутствует браузерное хранилище. В этом
случае:
supports возвращает false для всех
драйверовВ Electron, Cordova или Capacitor поведение зависит от конфигурации
WebView. supports может возвращать разные результаты для
одной и той же платформы в зависимости от настроек безопасности.
Несмотря на простоту, метод имеет ряд ограничений:
API может существовать, но быть фактически недоступным (например, IndexedDB в ограниченном режиме приватного просмотра).
LocalStorage может быть доступен, но иметь крайне малый объём или быть почти заполненным.
Метод не гарантирует, что операции записи будут успешными в будущем.
Некоторые ошибки возникают только при реальных транзакциях и не
выявляются на этапе supports.
Метод часто используется до вызова:
config()setDriver()createInstance()Типичный сценарий — построение стратегии выбора драйвера до инициализации экземпляра.
При этом важно учитывать, что supports не зависит от
config и работает независимо от текущих настроек.
Используется для логирования возможностей браузера перед инициализацией приложения.
В корпоративных браузерах часто отключён IndexedDB. Проверка позволяет автоматически переключиться на fallback.
IndexedDB может быть предпочтительнее LocalStorage, но требует проверки доступности перед использованием.
Позволяет централизовать стратегию выбора драйвера без разбрасывания try/catch по коду.
Библиотека предоставляет стандартные идентификаторы драйверов:
localforage.INDEXEDDBlocalforage.WEBSQLlocalforage.LOCALSTORAGEИспользование строковых значений допустимо, но менее безопасно, так как может привести к ошибкам при опечатках или изменении API.
LocalStorage требует более сложной проверки по сравнению с IndexedDB, поскольку:
Поэтому supports часто включает попытку записи тестового
значения с последующим удалением.
Метод не гарантирует успешную работу драйвера в будущем.
Частая ошибка — предположение, что проверка supports
заменяет необходимость обработки ошибок при setDriver.
localforage.supports("INDEXEDDB")
Такой подход менее надёжен и может привести к несовместимости.
Метод supports следует рассматривать как инструмент
раннего фильтра:
Его основная ценность заключается в возможности построения предсказуемой стратегии выбора драйвера до начала работы с данными, что особенно важно в средах с фрагментированной поддержкой Web API.