web-dev-qa-db-fra.com

Comment utiliser le navigateur au lieu de l'API du système de fichiers HTML5 window.webkitStorageInfo?

Il y a donc un article similaire trouvé ici html-5-filesystem-access-type-error . Cependant, je ne suis pas très satisfait de la conclusion car je ne pense pas qu'elle ait réellement répondu à la question - la solution donnée est la solution de code obsolète. Est-ce que quelqu'un sait comment utiliser navigator au lieu de window comme la console Chrome informe de faire?

J'utilise les éléments suivants et cela fonctionne, mais la console chrome continue de m'informer de ne pas le faire car elle est obsolète.

Code obsolète de travail

window.webkitStorageInfo.requestQuota(PERSISTENT, 1024*1024*280, function(grantedBytes) {
    window.webkitRequestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler); 
}, function(e) {
    console.log('Error', e); 
});

Remarque: onInitFs et errorHandler sont deux fonctions définies ailleurs, qui fonctionnent.

Journal de la console - Le message que je reçois dans la console est le suivant:

'window.webkitStorageInfo' is deprecated. Please use 'navigator.webkitTemporaryStorage'
or 'navigator.webkitPersistentStorage' instead. 

La meilleure pratique serait donc de cesser d'utiliser la méthode déconseillée. Malheureusement, lorsque je remplace window par navigator, il se bloque (voir ci-dessous). Comment utiliser navigator au lieu de window pour accéder au système de fichiers?

23
Arthur Weborg

Vous trouverez ci-dessous deux exemples avec l'API current.

Il utilise navigator.webkitPersistentStorage.requestQuota au lieu des obsolètes window.webkitStorageInfo.queryUsageAndQuota:

Quota de quota

navigator.webkitTemporaryStorage.queryUsageAndQuota ( 
    function(usedBytes, grantedBytes) {  
        console.log('we are using ', usedBytes, ' of ', grantedBytes, 'bytes');
    }, 
    function(e) { console.log('Error', e);  }
);

Demander un quota

var requestedBytes = 1024*1024*280; 

navigator.webkitPersistentStorage.requestQuota (
    requestedBytes, function(grantedBytes) {  
        console.log('we were granted ', grantedBytes, 'bytes');

    }, function(e) { console.log('Error', e); }
);

Vous devez choisir soit temporaire (webkitTemporaryStorage) ou persistant (webkitPersistentStorage) stockage à interroger.

L'implémentation actuelle de Chrome suit cette version spécifique des spécifications, qui décrit un peu plus les choses: http://www.w3.org/TR/2012/WD-quota-api- 20120703 /

chromestore.js fournit une API plus simple pour ces données.


Pour répondre à votre question d'origine, votre nouveau code ressemblerait à ceci:

Demander un quota et initialiser le système de fichiers

var requestedBytes = 1024*1024*280; 

navigator.webkitPersistentStorage.requestQuota (
    requestedBytes, function(grantedBytes) {  
        window.webkitRequestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler); 

    }, function(e) { console.log('Error', e); }
);
36
Paul Irish

Le message d'erreur vous indique d'utiliser navigator.webkitTemporaryStorage ou navigator.webkitPersistentStorage et vous essayez d'utiliser navigator.webkitStorageInfo qui est undefined.

MISE À JOUR: PERSISTENT ne doit pas être transmis à navigator.webkitTemporaryStorage ou navigator.webkitPersistentStorage mais uniquement à window.webkitRequestFileSystem. Ensuite, il n'y a plus d'erreur. (voir: L'API du système de fichiers ne fonctionne pas dans Chrome v27 & v29 )

10
dievardump

Récemment, j'ai passé du temps à créer une couche d'abstraction pour l'API Filesystem avec Persistent Storage appelée Chromestore.js. J'ai corrigé cette erreur dans la couche d'abstraction en utilisant la même solution que celle évoquée ici. Mais avec cette API, vous n'avez pas à vous en préoccuper et c'est propre.

https://github.com/summera/chromestore.js

Il fournit également des fonctionnalités supplémentaires assez pratiques. Elle doit certainement être développée, ce que je compte faire bientôt. Toutes les suggestions/commentaires sont très appréciés! Cela devrait faciliter la tâche de ceux qui utilisent l'API FileSystem. Surtout pour ceux qui essaient de stocker de grandes quantités de données récupérées à partir de serveurs distants.

Des exemples et de la documentation sont ici: https://github.com/summera/chromestore.js/blob/master/chromestore-api.md

Je pense que cela a le potentiel d'être étendu et de faire des choses vraiment intéressantes avec les données et l'API Filesystem.

À votre santé!

5
Ari