Android および iOS 用の PhoneGap アプリケーションを作成しようとしています。
これまでのところ、Android 2.2 以降で LocalFileSystem にアクセスできる程度に成功しています。
iOS (5 および 6) では、残念ながらそのような運はありませんでした。
FileReaderとFileWriterの例も同様に機能しません。
私はjsconsole.comを使用してこれをデバッグするのに時間を費やしました。ファイルシステムに問題がある理由を説明します。
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 から取得)。
さらに説明が必要な場合や質問がある場合は、できるだけ早く提供します。
お時間をいただきありがとうございます!