Как я могу запросить увеличение размера локального хранилища HTML5 на iPad, как это делает веб-приложение FT?
Если вы откроете http://app.ft.com/ (мобильное веб-приложение Financial Times), вам будет предложено добавить приложение в "дом".
После этого, когда вы откроете приложение, вам снова будет предложено увеличить размер базы данных localstoreage до 50 МБ.
- Как это может быть сделано? Есть ли какой-нибудь вызов JavaScript API? Разрешения или как?
- Этот iPad (iOS?) Специфичен или работает в других браузерах Webkit?
5 ответов
Я случайно что-то знаю об этом;)
Нет API для запроса увеличения размера хранилища для существующей базы данных. Существует один способ форсировать увеличение: записывать данные в базу данных в таком размере, который требует увеличения, запрашивая пользователя. Тем не менее, это будет медленно, и нет никакого способа узнать о выделенном в настоящий момент месте, поэтому это не рекомендуется.
У Black Frog есть часть этого правильного: единственный удобный способ сделать это - запросить очень большую базу данных, когда она открыта, например:
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" будут отличаться странным образом:)
Эта база данных является частью API базы данных Web SQL, который не является частью HTML5. Используйте следующий набор размера вашей базы данных
function prepareDatabase(ready, error) {
return openDatabase('documents', '1.0', 'Offline document storage', 50*1024*1024, function (db) {
db.changeVersion('', '1.0', function (t) {
t.executeSql('CREATE TABLE docids (id, name)');
}, error);
});
}
Знакомство с базами данных Web SQL на HTML5 Доктор имеет очень краткое руководство о том, как все это работает.
Я только что проверил в своем автономном приложении на iPad 2( iOS 5.1.1), что нам не нужно делать что-то конкретное внутри приложения. Например, мое приложение имеет около 18 МБ автономных данных. Когда браузер нажал на URL, браузер высветил сообщение с просьбой увеличить его до 25 МБ, и я принял его, и все в порядке. Спасибо
Это зависит от браузера. Большинство из них установили его на 5 МБ, а некоторые дают возможность увеличить его с помощью параметра где-то. Хотя не все браузеры предлагают это.
Да. Погружение в HTML5 говорит, что ни один браузер не поддерживал это по состоянию на февраль 2011 года, так что я думаю, что это может быть iOS 4.3? (iOS 4.3 поставляется в марте 2011 года.)
Я не могу найти ссылки на него из быстрого Google. В документации Apple для разработчиков может быть упомянуто об этом - я не уверен, что она доступна для подписчиков не SDK.