5

我正在使用PhoneGap(现在的Apache Cordova,版本为2.0)开发一个应用程序,并使用PhoneGap File API 来编写文件。

我使用的 File API 可以参考: http ://docs.phonegap.com/en/2.0.0/cordova_file_file.md.html#File

我从这里使用 Ripple Emulator (0.9.9beta):https ://developer.blackberry.com/html5/download在 chrome 中测试我的应用程序。

但我发现 Ripple 无法正确处理 PhoneGap File API。

例如:

我想在 PERSISTENT 目录中创建一个文件 (root/foo.json)

function onSuccess(fileSystem) {
    fileSystem.root.getDirectory("dir", {create: true}, function(dirEntry){
        dirEntry.getFile("foo.json", {create: true}, function(fileEntry){       
            fileEntry.createWriter(function(writer){
                writer.write(JSON.stringify(fooData));
            }, onfail);
        }, onfail);
    }, onfail);
}
function onfail(error)
{
    console.log(error.code);
}

// request the persistent file system
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onSuccess, onfail);

它在 iOS 模拟器上运行良好,它确实在正确的位置创建了正确的文件,但在 chrome 中运行的 Ripple Emulator 中,我刚刚收到一个 onfail 回调,并得到错误代码 10 (FileError.QUOTA_EXCEEDED_ERR)。

我还在这里找到了有类似问题的人:是否能够在模拟器之外测试 phonegap 应用程序?

但仍然没有答案。

Ripple 模拟器目前是否无法在 PhoneGap API 上正常工作?还是我错过了一些设置?

4

1 回答 1

3

发现问题。我需要在使用 PERSISTENT 文件系统对象之前授予配额。 https://developers.google.com/chrome/whitepapers/storage#persistent

// Request Quota (only for File System API)

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

似乎 Ripple-UI 并没有为我做这件事(我检查了 lib/ripple/fs.js 的源代码)。这就是为什么我总是收到 FileError.QUOTA_EXCEEDED_ERR。

于 2012-09-28T04:45:46.060 回答