Come posso richiedere un aumento della dimensione dello spazio locale HTML5 su iPad, come fa l’app Web FT?

Se apri http://app.ft.com (l’app web mobile di Financial Times), ti viene chiesto di aggiungere l’app alla tua “casa”.

Dopo averlo fatto, quando apri l’app, ti viene chiesto di nuovo di consentire che la dimensione del database localstoreage sia aumentata fino a 50 MB.

  • Come si può fare? C’è qualche chiamata API JavaScript? Permessi o altro?
  • Questo iPad (iOS?) È specifico o funziona su altri browser Webkit?

Mi capita di sapere qualcosa su questo;)

Non esiste alcuna API per richiedere un aumento delle dimensioni di archiviazione per un database esistente. C’è un modo per forzare un aumento: scrivere dati nel database in una dimensione tale da richiedere un aumento, che richiede all’utente. Tuttavia, questo sarebbe lento e non c’è modo di dire lo spazio attualmente assegnato, quindi non è raccomandato.

Black Frog ha una parte di questo corretto: l’unico modo per farlo è richiedere un database molto grande quando viene aperto, ad esempio:

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

… per richiedere 50 MB di spazio.

Tuttavia, quando l’utente visita per la prima volta il sito, potresti non voler chiedere loro un limite di 50 MB in una sola volta; quindi potresti pensare che potresti chiedere 5 MB in un primo momento e poi riaprirlo in seguito con 50 MB? Sfortunatamente, questo non funziona – il secondo tentativo aperto, con una quantità aumentata, riesce silenziosamente, non richiedendo un aumento di dimensioni e non aumentando effettivamente le dimensioni disponibili.

L’app FT inizia quindi con un database di “anteprima” da 5 MB, in modo che l’utente non venga richiesto al primo caricamento. Cerca di non superare questo limite di 5 MB, poiché ogni spazio assegnato deve essere condiviso su tutti i database.

Se l’utente sceglie di consentire la memorizzazione di più contenuti, l’app tenta quindi di aprire un database con un nome diverso con 40 MB di spazio (per il quale all’utente viene richiesto di approvare 50 MB). Ciò consente 40 MB in quel database e 5 MB nel database di anteprima originale, quindi nessuno dei due dovrebbe fallire quando si inseriscono le righe – poiché il totale di 50MB è attualmente il limite su iOS.

Tutti i browser gestiscono attualmente i limiti di spazio del database in modo diverso, quindi se stai pianificando su più piattaforms, prova attentamente. Desktop Safari lo gestisce piuttosto bene, consentendo molto più grande; Chrome non consente alcun aumento; ecc. Aspettatevi che tutte le implementazioni “HTML5” differiscano in strani modi 🙂

Questo database fa parte dell’API del database SQL Web , che non fa parte di HTML5. Utilizzare quanto segue per impostare le dimensioni del database

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

L’introduzione di database SQL Web su HTML5 Doctor ha un tutorial molto veloce su come funziona tutto questo.

Ho appena provato con la mia app offline in iPad 2 (iOS 5.1.1) che non abbiamo bisogno di fare qualcosa di specifico all’interno della app. Ad esempio, la mia app ha circa 18 MB di dati offline. Quando il browser ha colpito l’URL, il browser ha visualizzato il messaggio che richiede l’aumento della dimensione a 25 MB e l’ho accettato e tutto va bene. Grazie

È specifico per il browser. Molti lo hanno impostato a 5 MB e alcuni offrono la possibilità di aumentarlo attraverso un’impostazione da qualche parte. Tuttavia, non tutti i browser offrono questo.

Huh – L’immersione in HTML5 dice che nessun browser l’ha supportato a partire da febbraio 2011 , quindi immagino che questa potrebbe essere una cosa di iOS 4.3? (iOS 4.3 spedito a marzo 2011.)

Non riesco a trovare alcun riferimento ad esso da un rapido Google. La documentazione dello sviluppatore di Apple potrebbe dirlo – non sono sicuro che sia disponibile per gli abbonati non SDK.