Как получить корневую папку в расширениях Chrome? - PullRequest
3 голосов
/ 16 февраля 2012

Я разрабатываю Chrome Extesion впервые и следую единственному руководству, объясняющему что-то об этом: HTML5 ROCKS - FILESYSTEM . Мне нужно получить память для моего расширения, и я решил:

window.webkitStorageInfo.requestQuota(window.PERSISTENT,1024*1024, onInitFs, errorHandler);

Хорошо, это работает. Теперь мне нужно создать XML-файл в корне, но в «onInitFs» var «fs» - это только число, а «fs.root» не может его получить.

function onInitFs(fs){

    console.log(fs.root); // -> Undefined

    fs.root.getFile('list.xml', {create: true, exclusive: true}, function(fileEntry) {
        fileEntry.isFile === true;
        fileEntry.name == 'list.xml';
        fileEntry.fullPath == '/list.xml';

    }, errorHandler); 
}

Кто-нибудь может объяснить, почему это не работает и как решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

Использование RequestFileSystem в расширении Chrome

Чтобы использовать FileSystem API в качестве корневой файловой системы для вашего расширения Chrome, вы можете использовать window.webkitRequestFileSystem вместо requestQuota.

window.webkitRequestFileSystem(window.PERSISTENT, 1024 * 1024, function (filesystem) {      
        console.log(filesystem);                
        console.log(filesystem.root);
}, function (e) { console.log("Could not request File System"); });

Это правильно печатает на Chrome 15,16 и 17 для меня:

DOMFileSystem
DirectoryEntry

Использование requestQuota для приложений HTML5

Просто для справки, это был бы способ фактически запросить квоту (то есть, когда не используется расширение Chrome). Сначала вы должны запросить квоту (пользователь видит небольшой баннер в верхней части своего окна). RequestFileSystem вызывается, если пользователь принимает.

window.webkitStorageInfo.requestQuota(PERSISTENT, 1024*1024, function(grantedBytes) {
  window.webkitRequestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler); 
}, function(e) {
  console.log('Error requesting filesystem', e); 
});

В конце концов, возможно, потребуется запросить квоту внутри расширения. В настоящее время это можно обойти с разрешения unlimitedStorage. Текущее состояние типов реализации / хранения см. http://code.google.com/chrome/whitepapers/storage.html

0 голосов
/ 16 февраля 2012

До текущей стабильной версии 17.x вы не можете использовать HTML5 FileSystem API в расширении Chrome. Я попробовал это, браузер зависнет, если я вызову FileSystem API на фоновой странице.

А вот список HTML5 API, который вы можете использовать в расширении Chrome: http://code.google.com/chrome/extensions/api_other.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...