Как я могу запросить увеличение размера локального хранилища 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.

Другие вопросы по тегам