Javascript在PhoneGap 3.4.0中不能正常工作

Javascript not working properly in PhoneGap 3.4.0

本文关键字:常工作 工作 不能 PhoneGap Javascript      更新时间:2023-09-26

我是phonegap的新手,在javascript和phonegap上工作时面临着奇怪的问题。这是我正在工作的javascript:

var app = {
// Application Constructor
initialize : function() {
        alert("hpslisdf");
        this.bindEvents();
},
bindEvents : function() {
    document.addEventListener('deviceready', this.onDeviceReady, false);
},
// deviceready Event Handler
//
// The scope of 'this' is the event. In order to call the 'receivedEvent'
// function, we must explicity call 'app.receivedEvent(...);'
onDeviceReady : function() {
    app.receivedEvent('deviceready');
},
// Update DOM on a Received Event
receivedEvent : function(id) {
    // alert("inside received");
    var parentElement = document.getElementById(id);
    var listeningElement = parentElement.querySelector('.listening');
    var receivedElement = parentElement.querySelector('.received');
    listeningElement.setAttribute('style', 'display:none;');
    receivedElement.setAttribute('style', 'display:block;');
    alert("received event");
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
    alert("after filesystem");
    console.log('Received Event: ' + id);
}
};
function gotFS(fileSystem) {
// var reader = fileSystem.root.createReader();
// reader.readEntries(gotList, fail);
var sdcard = fileSystem.root;
// alert(sdcard.value);
sdcard.getDirectory('dcim/camera', {
    create : false
}, function(dcim) {
    // alert(dcim.value);
    var directoryReader = dcim.createReader();
//  alert("hs");
    directoryReader.readEntries(function(entries) {
        for (var i = 0; i <1 ; i++) {
            //entries.length
            // alert(entries.length);
            entries[i].file(function(f) {
                // alert(entries[i]);
                var reader = new FileReader();
                reader.onloadend = function(evt) {
                    // alert("xxxxxx");
                    var url = evt.target.result;// base64 data uri
                    // alert("now");
                    // var img = $('<img id="dynamic>'); //Equivalent:
                    // $(document.createElement('img'))
                    // var img=$('#dynamic');
                    // img.attr('value','')
                    // img.attr('src', url);
                    // img.appendTo('#imagediv');
                //  $('#imagediv').html('hiiiii').show();
                    // imagediv.attr('value','hiiiii');
                //  alert("hello");
                    var imagediv = document.getElementById("imagediv");
                imagediv.innerHTML = "hiytrud";
                //  var elem = document.createElement("img");
                    //elem.src = url;
                    //imagediv.appendChild(elem);
                    // alert(url);
                    // console.log(url)
                    // reader.abort();
                };
                reader.readAsDataURL(f);
            },
                    function(error) {
                        console("Unable to retrieve file properties: "
                                + error.code);
                    });
        }
    }, function(e) {
        console.log(e.code);
    });
}, function(error) {
    console.log(error.code);
});
}
function fail(evt) {
alert("fail");
console.log(evt.target.error.code);
}

现在我面临的第一个问题是,我看到大多数警报两次,但app.initialize方法在我的html代码中只调用一次。并且没有调用gotFS()。现在你们大多数人会说问题出在下面一行:

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);

,但我已经添加了fileSystemFileTransfer插件。同时,控制到达下一行,我可以看到下一行的警报,即。"after filesystem",但是这个警报只出现一次。而gotFS方法或fail方法根本不会被加载。我不知道我做错了什么,请帮帮我。

可能不起作用的两个明显原因是:

  1. 回调方法没有定义。
  2. 您正在尝试在浏览器/web模拟器中测试它。

你能提供回调的代码,并确保可以从receivedEvent调用没有错误吗?