【发布时间】:2013-09-11 13:27:17
【问题描述】:
使用phonegap 2.9.0,使用此回调读取文件:
fBrowse.params.on_file_select = function(file){ // file: FileEntry
try{
var reader = new FileReader();
jsIQ.msg('loading game!..');
reader.onload = function(evt) {
// success
var game = null;
// remove garbage from string
jsIQ.msg('loading game!3..' + arguments.length);
jsIQ.msg('loading game!3/2: ' + evt.target.result);
//jsIQ.msg('data: ' + evt.target.result, 2);
var s = $.trim(B64.decode(evt.target.result));
jsIQ.msg('loading game!4..');
s = s.substr(0, s.indexOf('}')+ 1);
jsIQ.msg('loading game!5..');
game = JSON.parse( s );
if (game != null) {
// success!
$('#fBrowse').hide();
jsIQ.msg('Load game success', 2);
jsIQ.triggerEvent('heart_game_loaded', {data: game});
}
};
reader.onerror = function(){
alert('error reading file');
};
jsIQ.msg('loading game!2..');
file.file(function(f){
reader.readAsText(f);
}, function(){
alert('Error opening file');
});
} catch (e){
jsIQ.msg('loadgame err: ' + e.message, 2);
alert('Внутренняя ошибка');
}
//return true;
};
我看到了这个日志文件的内容:
...
[-] 17:1:26.257 加载游戏文件:/mnt/sdcard/heartofice/heartofice2.savegame
[-] 17:1:26.260 加载游戏!..
[-] 17:1:26.262 加载游戏!2..
[-] 17:1:26.270 加载游戏!3..1
这意味着,与
evt.target.result
在没有任何通知的情况下出现错误! "evt" 已传递给成功读取回调,但我不能使用它??
这发生在真正的 android 设备 (4.0.3) 上
尝试使用 onload 回调中的“reader.result”,但行为相同!
如何解决?
【问题讨论】:
-
我尝试使用 onloadend 事件 - 结果相同...
-
您在 logcat 中是否遇到任何错误? logcat 也会显示任何 JavaScript 控制台错误。您可以尝试执行
console.log(JSON.stringify(evt))之类的操作,以查看evt对象是否符合您的预期。 -
jsIQ.msg 执行与 console.log 相同的日志,但在外部文件中。但是任何类型的使用“evt”都会破坏这个函数:typeof(evt), if (!evt)。
标签: javascript android cordova filereader