Как я могу запросить увеличение размера локального хранилища HTML5 на iPad, как это делает веб-приложение FT? - PullRequest
31 голосов
/ 08 июня 2011

Если вы откроете http://app.ft.com (мобильное веб-приложение Financial Times), вам будет предложено добавить приложение в «дом».

После этого, когда вы откроете приложение, вам снова будет предложено увеличить размер базы данных localstoreage до 50 МБ.

  • Как это можно сделать? Есть ли какой-нибудь вызов API JavaScript? Разрешения или как?
  • Этот iPad (iOS?) Специфичен или работает в других браузерах Webkit?

Ответы [ 5 ]

37 голосов
/ 08 июня 2011

Я кое-что знаю об этом;)

Нет 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" будут отличаться странным образом:)

7 голосов
/ 08 июня 2011

Эта база данных является частью API веб-базы данных API, который не является частью 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 Доктор имеет очень краткое руководство о том, как все это работает.

1 голос
/ 31 августа 2012

Я только что проверил с моим автономным приложением на iPad 2 (iOS 5.1.1), что нам не нужно делать ничего конкретного внутри приложения.Например, мое приложение имеет около 18 МБ автономных данных.Когда браузер нажал на URL, браузер высветил сообщение с просьбой увеличить его до 25 МБ, и я принял его, и все в порядке.Спасибо

0 голосов
/ 08 июня 2011

Это зависит от браузера.Большинство из них установили его на 5 МБ, а некоторые дают возможность увеличить его с помощью параметра где-то.Хотя не все браузеры предлагают это.

0 голосов
/ 08 июня 2011

Да. Погружение в HTML5 говорит о том, что ни один браузер не поддерживал это по состоянию на февраль 2011 года , так что я думаю, это может быть iOS 4.3? (iOS 4.3 поставляется в марте 2011 года.)

Я не могу найти ссылки на него в быстром Google. В документации Apple для разработчиков может быть упомянуто об этом - я не уверен, что она доступна для подписчиков не SDK.

...