Comment utiliser navigator au lieu de window.WEBKITSTORAGEINFO HTML5 File-system API?

il y a Donc un poste similaire trouvé ici html-5-système de fichiers-accès-type de l'erreur . Cependant, je ne suis pas très satisfait de la conclusion parce que je ne pense pas qu'il a réellement répondu à la question - la solution donnée est la solution de code dépréciée. Est-ce que quelqu'un sait utiliser navigator au lieu de window comme la console Chrome l'indique?

j'ai utilisé les suivants et cela fonctionne, mais la console chrome garde m'informant de ne pas le faire, car il est obsolète.

"1519170920 De Travail" Obsolète "Code De L'1519180920"

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

Note: 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. 

donc la meilleure pratique serait d'arrêter en utilisant la méthode dépréciée. Malheureusement, quand je remplace window par navigator il se brise (voir ci-dessous). Comment utiliser navigator au lieu de window pour accéder au système de fichier?

22
demandé sur Community 2013-07-23 16:09:15

3 réponses

ci-dessous deux exemples avec L'API current .

il utilise navigator.webkitPersistentStorage.requestQuota au lieu de l'déprécié window.webkitStorageInfo.queryUsageAndQuota :

"1519130920 De La Requête" Quota
navigator.webkitTemporaryStorage.queryUsageAndQuota ( 
    function(usedBytes, grantedBytes) {  
        console.log('we are using ', usedBytes, ' of ', grantedBytes, 'bytes');
    }, 
    function(e) { console.log('Error', e);  }
);

Demande De 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 persistante ( webkitPersistentStorage ) stockage pour interrogation.

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

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


pour répondre à votre question originale, votre nouveau code ressemblerait à ceci:

demande de quota et initialise 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); }
);
33
répondu Paul Irish 2015-04-16 00:06:07

Le message d'erreur 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 passé à navigator.webkitTemporaryStorage ou navigator.webkitPersistentStorage mais seulement à window.webkitRequestFileSystem . Ensuite, il n'y a plus d'erreur. (voir: API de système de fichiers ne fonctionnant pas dans Chrome v27 & v29 )

10
répondu dievardump 2017-05-23 11:47:13

récemment, j'ai passé un certain temps à créer une couche d'abstraction pour L'API du système de fichiers avec un stockage persistant appelé Chromestore.js. J'ai corrigé cette erreur dans la couche d'abstraction en utilisant la même solution parlé ici. Mais avec cette API, il n'y a pas besoin de s'inquiéter et c'est propre.

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

il fournit certaines fonctionnalités supplémentaires qui est assez pratique comme bien. Il faut absolument qu'elle soit étoffée, ce que j'ai l'intention de faire bientôt. Toutes les suggestions/commentaires sont très appréciés! Cela devrait faciliter la tâche aux utilisateurs de l'API du système de fichiers. Surtout pour ceux qui essaient de stocker de grandes quantités de données extraites de serveurs distants.

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

je pense que cela a le possibilité d'être élargi et de faire des choses vraiment soignées avec les données et L'API du système de fichiers.

santé!

5
répondu Ari 2013-12-08 01:59:00