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

Ура!