Ответ 1
Я знаю кое-что об этом;)
Нет API для запроса увеличения размера хранилища для существующей базы данных. Существует один способ заставить увеличить: записывать данные в базу данных такого размера, что требуется увеличение, вызвав пользователя. Однако это будет медленным, и нет возможности рассказать о выделенном пространстве, поэтому не рекомендуется.
Черная лягушка имеет часть этого правильного: единственный способ сделать это - запросить очень большую базу данных при ее открытии, например:
openDatabase('databaseName', '1.0', 'My Database', 50*1024*1024, …
... запросить 50 МБ пространства.
Однако, когда пользователь сначала посещает сайт, вы можете не захотеть сразу же сообщить им о пределе 50 МБ; так что вы можете подумать, что сначала можете запросить 5 МБ, а затем снова открыть его с 50 МБ? К сожалению, это не сработает - вторая открытая попытка с увеличенным количеством успешно завершает работу, не запрашивая увеличения размера и фактически не увеличивая доступный размер.
Таким образом, приложение FT начинается с базы данных "предварительного просмотра" размером 5 МБ, так что пользователю не будет предложено при первой загрузке. Он пытается не превышать этот предел в 5 МБ, поскольку любое назначенное пространство должно быть общим для всех баз данных.
Если пользователь решит разрешить хранение большего количества контента, приложение затем пытается открыть базу данных с другим именем с 40 МБ пространства (для которого пользователю предлагается утвердить 50 МБ). Это позволяет 40 МБ в этой базе данных и 5 МБ в исходной базе данных предварительного просмотра, поэтому ни один из них не должен терпеть неудачу при вставке строк - поскольку в настоящее время ограничение на 50 МБ является пределом для iOS.
Все браузеры в настоящее время обрабатывают пределы пространства базы данных по-разному, поэтому, если вы планируете кросс-платформу, тщательно протестируйте ее. Desktop Safari обрабатывает его довольно красиво, позволяя гораздо больше; Chrome не позволяет никакого увеличения вообще; и т.д. Ожидайте, что все реализации "HTML5" будут отличаться странными способами:)