我正在尝试为 Android 和 iOS 创建一个 PhoneGap 应用程序。
到目前为止,我已经成功地访问了 Android 2.2 及更高版本上的 LocalFileSystem。
在 iOS(5 和 6)上,不幸的是我没有这样的运气。
FileReader和FileWriter示例也无法正常工作。
我已经花了一些时间使用jsconsole.com进行调试,据我所知 window.requestFileSystem 和 window.webkitRequestFileSystem 都是未定义的。这可以解释为什么我的文件系统有问题。
我在 iOS 部分使用 Cordova 2.2.0 和 XCode 4.5。
示例和我自己的代码都在 Android 上运行。
如果你们中的任何人有任何建议,我真的很感激它对我的心理健康产生的积极影响!
编辑:
index.html:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="format-detection" content="telephone=no" />
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
<title>Hello World</title>
</head>
<body>
<div class="app">
<a href="javascript:myfs.clicked()">click!</a>
</div>
<script type="text/javascript" src="cordova-2.2.0.js"></script>
<script type="text/javascript" src="js/jquery-1.8.2.min.js"></script>
<script src="http://jsconsole.com/remote.js?secret-debug-key"></script>
<script type="text/javascript" src="js/filesystem.js"></script>
<script type="text/javascript">
var myfs;
document.addEventListener('deviceready', function() {
myfs = new FS();
myfs.initializeFileSystem();
});
</script>
</body>
</html>
文件系统.js:
var FS = (function()
{
var self = {};
self.initializeFileSystem = function()
{
window.requestFileSystem = window.webkitRequestFileSystem || window.requestFileSystem;
window.requestFileSystem(1, 0, self.gotFS, self.fail);
};
self.gotFS = function (fileSystem)
{
window.rootFS = fileSystem.root;
//create our cache directory if it does not exist
var entry = fileSystem.root;
entry.getDirectory("tempdirectory", {create: true, exclusive: false}, function() {console.log("directory already present or created");}, function(error) {console.log("Error creating directory " + error.code);});
};
self.fail = function()
{
console.log("requestFileSystem failed");
};
self.downloadImage = function(url, fileName, callback)
{
var ft = new FileTransfer();
var filename = fileName;
var callback = callback;
ft.download(
url,
window.rootFS.fullPath + "/" + filename,
function(entry)
{
if(callback!= undefined)
{
callback(entry);
}
},
function(error)
{
console.log("download error: " + error.code);
}
);
};
self.clicked = function()
{
//random test URL
var url = "http://www.embeddedpeople.dk/_/rsrc/1301663383918/home/ydelser/konsulentydelser/test/test.png?height=400&width=350";
self.downloadImage(url, "test.png", function(){console.log("download succesful");$('body').append('<img src="file:///data/data/dk.attention8.filesystem/test.png" />');});
return false;
};
return self;
}
);
这适用于 Android,点击后,文件被下载,并且包含对下载图像路径的引用的 img 标签应该插入到 DOM 中。我知道此路径在 iOS 上无效,在带有 SD 卡的设备上也不正确,但在添加此 img 标签之前就出现了问题。
此图像应显示 javascript 代码在 Android 中工作(取自 Android Emulator)。
如果您需要进一步澄清或有问题,我会尽快提供。
感谢您的时间!