科尔多瓦 3.1.0-0.2.0
Droid Razr M
Android 4.1.2
Windows 7
PhoneGap/Cordova 的新手。运行来自http://docs.phonegap.com/en/3.1.0/cordova_file_file.md.html#File的文件系统演示之一。使用“cordova run android”编译代码并在通过 USB 连接的手机上运行。
问题#1:当应用程序第一次启动时,我得到了两次 alert("1") ,然后没有别的了。
问题 #2:当我通过 onclick 按钮启动代码时,我收到以下警报模式:1、2、2、3、3、4、6、5、7、4、6、5、7。其中一些基于代码流是有意义的,但它们中的大多数都触发了两次。
我怀疑问题 #2 是由第一次尝试时挂起的一些异步调用引起的,但无论我等待多长时间,这些事件都不会触发,直到我通过按钮启动代码。
那么为什么 requestFileSystem 调用即使在等待 deviceready 时也会失败,为什么其他代码会混在一起呢?
任何想法表示赞赏。
<!DOCTYPE html>
<html>
<head>
<title>FileReader Example</title>
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script type="text/javascript" charset="utf-8">
// Wait for device API libraries to load
//
document.addEventListener("deviceready", onDeviceReady, false);
// device APIs are available
//
function onDeviceReady() {
alert("1");
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}
function gotFS(fileSystem) {
alert("2");
fileSystem.root.getFile("readme.txt", null, gotFileEntry, fail);
}
function gotFileEntry(fileEntry) {
alert("3");
fileEntry.file(gotFile, fail);
}
function gotFile(file) {
alert("4");
readDataUrl(file);
alert("5");
readAsText(file);
}
function readDataUrl(file) {
alert("6");
var reader = new FileReader();
reader.onloadend = function (evt) {
console.log("Read as data URL");
console.log(evt.target.result);
};
reader.readAsDataURL(file);
}
function readAsText(file) {
alert("7");
var reader = new FileReader();
reader.onloadend = function (evt) {
console.log("Read as text");
console.log(evt.target.result);
};
reader.readAsText(file);
}
function fail(error) {
alert("8");
console.log(error.code);
}
</script>
</head>
<body>
<h1>Example</h1>
<p>Read File</p>
<button onclick="onDeviceReady();">Read File</button>
</body>
</html>