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?
Vous trouverez ci-dessous deux exemples avec l'API current.
Il utilise navigator.webkitPersistentStorage.requestQuota
au lieu des obsolètes window.webkitStorageInfo.queryUsageAndQuota
:
navigator.webkitTemporaryStorage.queryUsageAndQuota (
function(usedBytes, grantedBytes) {
console.log('we are using ', usedBytes, ' of ', grantedBytes, 'bytes');
},
function(e) { console.log('Error', e); }
);
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:
var requestedBytes = 1024*1024*280;
navigator.webkitPersistentStorage.requestQuota (
requestedBytes, function(grantedBytes) {
window.webkitRequestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler);
}, function(e) { console.log('Error', e); }
);
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 )
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é!