Подтвердить что ты не робот

Как использовать навигатор вместо 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 для доступа к файловой системе?

4b9b3361

Ответ 1

Ниже приведены два примера с текущим API.

Он использует navigator.webkitPersistentStorage.requestQuota вместо устаревшего window.webkitStorageInfo.queryUsageAndQuota:

Quota Quota​​h2 >

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 файловой системы.

Ура!