我最近更新到Cordova 3.4.1然后我继续构建和测试我的项目并发现它有问题。我花了最后一天半试图恢复和重建项目,以便它的工作。到目前为止,我没有尝试过任何工作。
获取错误:
Uncaught TypeError: Object [object DOMWindow] has no method 'requestFileSystem'
用于产生此错误的代码:
var app = {
appRoot: 'cdvfile://localhost/persistent/',
init: function(){
this.bindEvents();
},
bindEvents: function(){
document.addEventListener('deviceready', this.onDeviceReady(this), false);
},
onDeviceReady: function(that){
//location.reload(true);
console.log(Object.keys(window));
console.log(Object.keys(cordova));
window.requestFileSystem(window.PERSISTENT, 0, function(fs){
console.log('we have a fs');
fs.root.getFile(dir+file,{create:true, exclusive: false},function(fileEntry){
console.log('we have a file entry');
var reader = new FileReader();
reader.onloadend = function(evt){
success(evt.target.result);
};
reader.readAsText(dir+file);
},fail);
},fail);
}
};
function fail(e){
var msg = '';
switch (e.code) {
case FileError.QUOTA_EXCEEDED_ERR:
msg = 'QUOTA_EXCEEDED_ERR';
break;
case FileError.NOT_FOUND_ERR:
msg = 'NOT_FOUND_ERR';
break;
case FileError.SECURITY_ERR:
msg = 'SECURITY_ERR';
break;
case FileError.INVALID_MODIFICATION_ERR:
msg = 'INVALID_MODIFICATION_ERR';
break;
case FileError.INVALID_STATE_ERR:
msg = 'INVALID_STATE_ERR';
break;
default:
msg = 'Unknown Error';
break;
};
console.log('Error: ' + msg);
}
app.init();
我尝试了什么:
我已经确认插件已加载到项目中,并且它已构建到设备上。我正在使用Android SDK附带的monitor.bat
来监视控制台事件和错误,而requestFileSystem只是没有被注入。
我尝试过使用(按照here的建议):
location.reload()
和
location.reload(true) //not from cache
查看cordova插件初始化是否有错误但没有任何错误。
是否有人对可以解决此问题的方法有任何建议?
答案 0 :(得分:3)
您实际上是在过早地致电deviceReady
。在这一行:
document.addEventListener('deviceready', this.onDeviceReady(this), false);
onDeviceReady
的返回结果正在传递给addEventListener
,这不是您的意图,并且意味着在初始化任何插件之前它会被调用好。
最好这样做:
document.addEventListener('deviceready', this.onDeviceReady, false);
如果必须传递this
(或其他参数),请执行以下操作:
document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
但假设您正确设置对象,那么您不应该这样做。