обнаружение поддержки WebSQL (или ее отсутствие) в Safari 13 - PullRequest
0 голосов
/ 26 сентября 2019

Проблема с нашим мобильным приложением (приложение для домашнего экрана) началась с того, что с iOS 13 началось сообщение об отсутствии поддержки базы данных html5.

Он пытается определить поддержку WebSQL с помощью следующего кода:

function getDBType() {
  if (typeof window.openDatabase == "function") {
    return "WebSQL";
  }
  return "IndexedDB";
}

К сожалению, это сообщение о том, что, несмотря на то, что WebSQL был удален из Safari 13 , WebSQL доступен только для того, чтобы исключить его позднее, когда он попытается вызвать window.openDatabase().

При ближайшем рассмотрении кажется, что происходит нечто странное:

(typeof window.openDatabase == "function") == true
(typeof window.openDatabase == "undefined") == true
(typeof window.openDatabase == "randomstring") == false
window.openDatabase == [object Function]  /* not native function */

Тестовая страница: http://locutus.sorcerer.co.uk/demo/safari-openDatabase.html

Итак, вопрос в том, как правильно протестировать поддержку WebSQL.это будет работать на Safari 13?

Одна мысль состоит в том, чтобы сделать следующее, чтобы обнаружить отсутствие поддержки Safari 13 (с комментарием, объясняющим кажущийся бессмысленным тест)

if (typeof window.openDatabase == "function" && typeof window.openDatabase != "undefined") {
  return "WebSQL";
}

Примечание.: Возможно включить WebSQL в Safari 13 на настройках iOS, Safari -> Дополнительно -> Экспериментальные функции -> отключить опцию «Отключить WebSQL».Работает только в приложении Safari, хотя приложения Safari на домашнем экране все еще не получают поддержку WebSQL.

1 Ответ

0 голосов
/ 27 сентября 2019

Наш код использует if (!window.openDatabase) throw 'No WebSQL support';, и этого, по-видимому, достаточно, чтобы обнаружить отключенную настройку на iOS13

...