Полная сигнатура supports

localForage предоставляет метод проверки доступности конкретного драйвера в текущем окружении выполнения. Этот метод относится к низкоуровневой диагностике возможностей браузера и используется для определения того, может ли выбранный механизм хранения данных быть использован без инициализации.


Сигнатура

localforage.supports(driverName)

Параметры

driverName (string) Строка, идентифицирующая драйвер хранилища. Допустимые значения:

  • "INDEXEDDB"
  • "WEBSQL"
  • "LOCALSTORAGE"

Каждое значение соответствует конкретной технологии хранения данных в браузере.


Возвращаемое значение

boolean

Метод возвращает логическое значение:

  • true — драйвер поддерживается текущей средой выполнения
  • false — драйвер недоступен или отключён

Логика работы метода

Метод supports выполняет синхронную проверку окружения и не требует обращения к хранилищу данных. Проверка осуществляется на уровне доступности API браузера.

Основные этапы проверки:

  1. Анализ наличия глобальных объектов (например, indexedDB, localStorage, openDatabase)
  2. Проверка соответствия API требованиям драйвера
  3. Учет особенностей среды (Safari private mode, старые браузеры, WebView)

Поведение для разных драйверов

INDEXEDDB

localforage.supports('INDEXEDDB')

Возвращает true, если браузер предоставляет доступ к IndexedDB API.

Особенности:

  • Поддерживается всеми современными браузерами
  • Может быть ограничен в приватных режимах некоторых WebView

WEBSQL

localforage.supports('WEBSQL')

Возвращает true только в браузерах, где WebSQL всё ещё реализован.

Особенности:

  • Устаревшая технология
  • Поддерживается преимущественно в Safari и некоторых мобильных окружениях
  • Может отсутствовать даже при наличии WebKit-движка

LOCALSTORAGE

localforage.supports('LOCALSTORAGE')

Возвращает true, если доступен window.localStorage.

Особенности:

  • Может быть недоступен в приватных режимах браузеров
  • Ограничен по объему и типам данных

Внутренняя роль в архитектуре localForage

Метод supports используется как базовый фильтр перед выбором драйвера. Он не инициирует переключение, а лишь сообщает о возможностях среды.

Типичный сценарий:

  1. Проверка доступности INDEXEDDB
  2. Если false — проверка WEBSQL
  3. Если оба недоступны — переход на LOCALSTORAGE

Пример использования

if (localforage.supports('INDEXEDDB')) {
  console.log('IndexedDB доступен');
} else {
  console.log('IndexedDB недоступен');
}

Использование в логике выбора стратегии хранения

Метод часто применяется при ручной настройке драйверов:

const driver = localforage.supports('INDEXEDDB')
  ? localforage.INDEXEDDB
  : localforage.LOCALSTORAGE;

localforage.setDriver(driver);

Важные особенности

Синхронность

Метод выполняется синхронно, так как не взаимодействует с хранилищем данных и не требует асинхронных операций.


Независимость от конфигурации

supports не учитывает настройки, заданные через setDriver. Он проверяет только физическую возможность среды.


Ограничения

  • Не гарантирует корректную работу драйвера, только его наличие
  • Не проверяет квоты хранения
  • Не тестирует запись/чтение данных
  • Может давать ложноположительные результаты в некоторых WebView

Отличие от getDriver и setDriver

Метод Назначение
supports Проверка доступности драйвера
setDriver Установка драйвера
getDriver Получение текущего активного драйвера

Типичные сценарии применения

1. Предварительная проверка окружения

Используется перед инициализацией приложения:

if (!localforage.supports('INDEXEDDB')) {
  console.warn('IndexedDB не поддерживается');
}

2. Ручная деградация (fallback)

let driver;

if (localforage.supports('INDEXEDDB')) {
  driver = localforage.INDEXEDDB;
} else if (localforage.supports('WEBSQL')) {
  driver = localforage.WEBSQL;
} else {
  driver = localforage.LOCALSTORAGE;
}

localforage.setDriver(driver);

3. Диагностика окружения

const capabilities = {
  indexedDB: localforage.supports('INDEXEDDB'),
  webSQL: localforage.supports('WEBSQL'),
  localStorage: localforage.supports('LOCALSTORAGE')
};

console.log(capabilities);

Поведение в нестандартных средах

Node.js

Возвращает false для всех драйверов, так как отсутствует браузерное API.


WebView (iOS/Android)

Результаты зависят от движка:

  • WKWebView: IndexedDB обычно доступен
  • старые Android WebView: возможны ограничения

Private Mode

Некоторые браузеры отключают localStorage или IndexedDB в приватных режимах, что приводит к false даже при наличии API.


Производительность

Метод имеет нулевую стоимость с точки зрения I/O, так как:

  • не выполняет асинхронных операций
  • не обращается к диску
  • не создает промисов
  • выполняется как простая проверка наличия API

Типичные ошибки использования

1. Предположение о работоспособности

if (localforage.supports('INDEXEDDB')) {
  // ошибка: IndexedDB может быть повреждён или заблокирован
}

Метод не гарантирует стабильность, только наличие.


2. Использование как замену тесту записи

supports не заменяет реальный тест setItem/getItem.


3. Жёсткая привязка к одному драйверу

localforage.setDriver(
  localforage.supports('WEBSQL')
);

Ошибка: setDriver требует драйвер, а не boolean.


Роль в архитектуре progressive enhancement

Метод является частью стратегии адаптивного хранения:

  • определение возможностей окружения
  • выбор максимально производительного драйвера
  • fallback на менее эффективные механизмы

Он используется на этапе конфигурации, а не во время работы приложения.