window.requestFileSystem在PhoneGap Cordova 3中失败/多次触发事件

window.requestFileSystem在PhoneGap Cordova 3中失败/多次触发事件,cordova,cordova-3,Cordova,Cordova 3,科尔多瓦3.1.0-0.2.0 Droid Razr M 安卓4.1.2 Windows 7 PhoneGap/Cordova的新成员。正在从运行一个文件系统演示。使用“cordova run android”编译代码并在通过USB连接的手机上运行 问题#1:当应用程序第一次启动时,我会收到两次警报(“1”),然后什么都没有 问题#2:当我通过按钮onclick启动代码时,我得到以下警报模式:1、2、2、3、3、4、6、5、7、4、6、5、7。基于代码流,其中一些是有意义的,但大多数都触发了两次

科尔多瓦3.1.0-0.2.0
Droid Razr M
安卓4.1.2
Windows 7

PhoneGap/Cordova的新成员。正在从运行一个文件系统演示。使用“cordova run android”编译代码并在通过USB连接的手机上运行

问题#1:当应用程序第一次启动时,我会收到两次警报(“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>

文件阅读器示例
//等待加载设备API库
//
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
//设备API可用
//
函数ondevicerady(){
警报(“1”);
requestFileSystem(LocalFileSystem.PERSISTENT,0,gotFS,fail);
}
函数gotFS(文件系统){
警报(“2”);
getFile(“readme.txt”,null,gotFileEntry,fail);
}
函数gotFileEntry(fileEntry){
警报(“3”);
fileEntry.file(gotFile,fail);
}
函数gotFile(文件){
警报(“4”);
readDataUrl(文件);
警报(“5”);
readAsText(文件);
}
函数readDataUrl(文件){
警报(“6”);
var reader=new FileReader();
reader.onloadend=函数(evt){
log(“读取为数据URL”);
日志(evt.target.result);
};
reader.readAsDataURL(文件);
}
函数readAsText(文件){
警报(“7”);
var reader=new FileReader();
reader.onloadend=函数(evt){
console.log(“读取为文本”);
日志(evt.target.result);
};
reader.readAsText(文件);
}
功能失败(错误){
警报(“8”);
console.log(错误代码);
}
例子
读取文件

读取文件