Как использовать навигатор вместо window.webkitStorageInfo HTML5 API файловой системы?
Итак, есть аналогичная статья, найденная здесь html-5-filesystem-access-type-error. Тем не менее, я не очень доволен результатом, потому что я не чувствую, что он действительно ответил на вопрос - данное решение является устаревшим решением кода. Кто-нибудь знает, как использовать 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
для доступа к файловой системе?
Ответы
Ответ 1
Ниже приведены два примера с текущим API.
Он использует navigator.webkitPersistentStorage.requestQuota
вместо устаревшего window.webkitStorageInfo.queryUsageAndQuota
:
Quota Quotah2 >
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); }
);
Ответ 2
Сообщение об ошибке сообщает вам использовать navigator.webkitTemporaryStorage
или navigator.webkitPersistentStorage
, и вы пытаетесь использовать navigator.webkitStorageInfo
, который является undefined
.
UPDATE:
PERSISTENT не следует передавать на navigator.webkitTemporaryStorage
или navigator.webkitPersistentStorage
, а только на window.webkitRequestFileSystem
. Тогда ошибок больше нет. (см. API-интерфейс файловой системы, не работающий в Chrome v27 и v29)
Ответ 3
Недавно я потратил некоторое время на создание уровня абстракции для API файловой системы с Persistent Storage под названием Chromestore.js. Я исправил эту ошибку на уровне абстракции, используя то же самое решение, о котором здесь говорили. Но с этим API нет необходимости беспокоиться об этом, и он чист.
https://github.com/summera/chromestore.js
Он предоставляет некоторые дополнительные функции, которые также очень удобны. Это определенно необходимо расширить, и я планирую сделать это в ближайшее время. Любые предложения/отзывы очень ценятся! Это должно облегчить работу с API-интерфейсом FileSystem. Особенно для тех, кто пытается хранить большие объемы данных, извлекаемых с удаленных серверов.
Примеры и документация приведены здесь: https://github.com/summera/chromestore.js/blob/master/chromestore-api.md
Я думаю, что это может быть расширено и сделать некоторые действительно опрятные вещи с данными и API файловой системы.
Ура!