Как использовать навигатор вместо окна.файл-система webkitStorageInfo в HTML5 API-интерфейс?
Итак, здесь есть аналогичный пост html-5-файловая система-доступ-тип-ошибка. Однако я не очень доволен выводом, потому что я не чувствую, что он фактически ответил на вопрос - данное решение является устаревшим решением кода. Кто-нибудь знает, как использовать navigator
вместо window
как консоль Chrome информирует делать?
я использую следующее, И это работает, но консоль chrome продолжает информировать меня не делать этого, потому что это является устаревшим.
Рабочий Устаревший Код
window.webkitStorageInfo.requestQuota(PERSISTENT, 1024*1024*280, function(grantedBytes) {
window.webkitRequestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler);
}, function(e) {
console.log('Error', e);
});
Примечание: onInitFs
и errorHandler
обе функции определены в другом месте, которые работают.
Консоли Журнала - сообщение я получаю в консоли выглядит следующим образом:
'window.webkitStorageInfo' is deprecated. Please use 'navigator.webkitTemporaryStorage'
or 'navigator.webkitPersistentStorage' instead.
поэтому лучшей практикой было бы прекратить использование устаревшего метода. К сожалению, когда я заменяю window
С navigator
она падает (см. ниже). Как использовать navigator
вместо window
доступ к файловой системе?
3 ответов
Ниже приведены два примера с настоящее API-интерфейс.
он использует navigator.webkitPersistentStorage.requestQuota
вместо устаревших 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); }
);
вы должны выбрать либо временное (webkitTemporaryStorage
) или постоянные (webkitPersistentStorage
) хранения для запроса.
текущая реализация Chrome отслеживает эту конкретную версию спецификации, которая описывает вещи немного больше: http://www.w3.org/TR/2012/WD-quota-api-20120703/
chromestore.js обеспечивает более простой API для этих данных.
чтобы ответить на ваш исходный вопрос, ваш новый код будет выглядеть так:
запросить квоту и инициализировать файловую систему
var requestedBytes = 1024*1024*280;
navigator.webkitPersistentStorage.requestQuota (
requestedBytes, function(grantedBytes) {
window.webkitRequestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler);
}, function(e) { console.log('Error', e); }
);
сообщение об ошибке говорит вам использовать navigator.webkitTemporaryStorage
или navigator.webkitPersistentStorage
и вы пытаетесь использовать navigator.webkitStorageInfo
что это undefined
.
обновление:
PERSISTENT не должен передаваться в navigator.webkitTemporaryStorage
или navigator.webkitPersistentStorage
, но только window.webkitRequestFileSystem
. Тогда ошибки больше нет. (см.: API файловой системы не работает в Chrome v27 & v29)
недавно я потратил некоторое время на создание слоя абстракции для API файловой системы с постоянным хранилищем под названием Chromestore.js. Я исправил эту ошибку в слое абстракции, используя то же решение, о котором говорилось здесь. Но с этим API, нет необходимости беспокоиться об этом и он чистый.
https://github.com/summera/chromestore.js
Он предоставляет некоторые дополнительные функции, которые также очень удобны. Это определенно должно быть расширено, что я планирую сделать в ближайшее время. Любые предложения / отзывы очень ценятся! Это должно облегчить использование API файловой системы. Особенно для тех, кто пытается хранить большие объемы данных, полученных с удаленных серверов.
примеры и документация здесь:https://github.com/summera/chromestore.js/blob/master/chromestore-api.md
Я думаю, что это может быть расширено и сделать некоторые действительно аккуратные вещи с данными и API файловой системы.
Ура!