我使用以下代码初始化类ReadConfig
:
var myReadConfig = new ReadConfig();
此工作正常,alert("2")
出现。
之后我运行调用方法window.requestFileSystem(...)
的语句gotFSReader
。
但我从未见过alert("3");
结果。
如何从gotFSReader
中运行此方法window.requestFileSystem(...)
?如果我在课外运行它完全有效......
我的班级:
var ReadConfig = function(){
var path = "Zugangsdaten.txt";
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFSReader, failReader);
alert("2");
var gotFSReader = function(fileSystem) {
alert("3");
fileSystem.root.getFile(path, null, gotFileEntryReader, failReader);
}
var gotFileEntryReader = function(fileEntry) {
fileEntry.file(gotFileReader, failReader);
alert("4");
}
var gotFileReader = function(file){
readAsText(file);
}
var readAsText = function(file) {
var reader = new FileReader();
reader.onloadend = function(evt) {
console.log("Read as text");
handleLocalPasswort(evt.target.result);
};
reader.readAsText(file);
}
var failReader = function(evt) {
console.log(evt.target.error.code);
}
var handleLocalPasswort = function(fileStr){
if(fileStr=="" || fileStr == null){
return;
}
var arrayItems = fileStr.split(";");
document.getElementById('tb_benutzer').value = arrayItems[0];
document.getElementById('tb_password').value = arrayItems[1];
document.getElementById('tb_knr').value = arrayItems[2];
checkLogin();
}
}
答案 0 :(得分:1)
您的代码结构不正确。您没有初始化该变量(“gotFSReader”),直到之后将值传递给该函数。因此,您正在传递undefined
,而不是对函数的引用。
在初始化之后移动window.requestFileSystem()
调用,或者用函数声明语句声明函数:
function gotFSReader(fileSystem) {
alert("3");
fileSystem.root.getFile(path, null, gotFileEntryReader, failReader);
}
如果你这样做,那么它就会起作用,因为函数声明语句总是被视为它们出现在包含函数的开头。
变量声明也被提升,但是有区别:只有var
语句的实际声明部分被视为在函数开始时发生。初始化是在var
实际出现的函数中完成的。因此,在您的代码中,名为“gotFSReader”的变量在您调用requestFileSystem()
时声明 ,但它尚未初始化。