web-dev-qa-db-fra.com

Comment puis-je demander une augmentation de la taille du stockage local HTML5 sur iPad, comme le fait l'application Web FT?

Si vous ouvrez http://app.ft.com (l'application Web mobile Financial Times), vous êtes invité à ajouter l'application à votre "domicile".

Ensuite, lorsque vous ouvrez l'application, vous êtes invité à nouveau à autoriser une augmentation de la taille de la base de données localstoreage jusqu'à 50 Mo.

  • Comment cela peut-il être fait? Existe-t-il un appel API JavaScript? Autorisations ou autre chose?
  • Cet iPad (iOS?) Est-il spécifique ou fonctionne-t-il sur d'autres navigateurs Webkit?
31
FrancescoR

Je sais quelque chose à ce sujet;)

Aucune API ne permet de demander une augmentation de la taille de stockage d'une base de données existante. Il existe un moyen de forcer une augmentation: écrivez des données dans la base de données à une taille telle qu'une augmentation est requise, en avertissant l'utilisateur. Cependant, cela serait lent et il n’existe aucun moyen de connaître l’espace actuellement alloué, ce qui n’est donc pas recommandé.

Black Frog a une partie de ce correct: le seul moyen astucieux de faire est de demander une très grande base de données quand elle est ouverte, par exemple:

openDatabase('databaseName', '1.0', 'My Database', 50*1024*1024, …

… Pour demander 50 Mo d'espace.

Cependant, lors de la première visite de l'utilisateur sur le site, vous ne voudrez peut-être pas lui demander immédiatement une limite de 50 Mo; vous pourriez donc penser que vous pourriez demander 5 Mo au début, puis le rouvrir plus tard avec 50 Mo? Malheureusement, cela ne fonctionne pas - la deuxième tentative d'ouverture, avec une quantité accrue, réussit en silence, sans demander d'augmentation de taille ni d'augmenter réellement la taille disponible.

L'application FT démarre donc avec une base de données "preview" de 5 Mo, de sorte que l'utilisateur ne soit pas invité au premier chargement. Il essaie de ne pas dépasser cette limite de 5 Mo, car tout espace attribué doit être partagé entre toutes les bases de données.

Si l'utilisateur choisit d'autoriser le stockage de davantage de contenu, l'application tente alors d'ouvrir une base de données avec un nom différent avec 40 Mo d'espace disque (pour lequel l'utilisateur est invité à approuver 50 Mo). Cela autorise 40 Mo dans cette base de données et 5 Mo dans la base de données de prévisualisation d'origine. Par conséquent, aucune de ces tentatives ne doit échouer lors de l'insertion de lignes. En effet, 50 Mo au total est actuellement la limite sur iOS.

À l'heure actuelle, tous les navigateurs traitent différemment les limites d'espace de la base de données. Par conséquent, effectuez un test minutieux si vous envisagez plusieurs plates-formes. Desktop Safari le gère plutôt bien, ce qui en permet beaucoup plus; Chrome ne permet aucune augmentation du tout. etc. Attendez-vous à ce que toutes les implémentations "HTML5" diffèrent de manière étrange :)

37
Rowan

Cette base de données fait partie de Base de données Web SQL API, qui ne fait pas partie de HTML5. Utilisez ce qui suit pour définir la taille de votre base de données

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);
    });
}

Introduction aux bases de données Web SQL sur HTML5 Doctor propose un tutoriel très rapide sur le fonctionnement de tout cela.

7
Black Frog

Je viens de tester avec mon application hors ligne dans iPad 2 (iOS 5.1.1) que nous n'avons besoin de rien faire de spécifique dans l'application. Par exemple, mon application contient environ 18 Mo de données hors connexion. Lorsque le navigateur a affiché une URL, le navigateur a affiché le message demandant une augmentation de la taille à 25 Mo. Je l'ai accepté et tout va bien. Merci

1
user1258024

C'est spécifique au navigateur. La plupart l'ont définie à 5 Mo et certains donnent la possibilité de l'augmenter quelque part. Cependant, tous les navigateurs ne proposent pas cela.

0
Ian Devlin