Cordova requestFileSystem不再被加载3.4.1

时间:2014-05-23 20:05:03

标签: android cordova

我最近更新到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();

我尝试了什么:

  • 我尝试使用以下Cordova版本3.3.1,3.4.0,3.4.1,3.5.0
  • 我尝试使用旧版本的文件api 1.0.0,1.0.1,1.1.0
  • 我尝试过从头开始创建一个新项目
  • 我尝试使用api版本17,19
  • 构建
  • 我已尝试在Android 4.2.2和4.4.2上进行测试

我已经确认插件已加载到项目中,并且它已构建到设备上。我正在使用Android SDK附带的monitor.bat来监视控制台事件和错误,而requestFileSystem只是没有被注入。

我尝试过使用(按照here的建议):

location.reload()

location.reload(true) //not from cache

查看cordova插件初始化是否有错误但没有任何错误。

是否有人对可以解决此问题的方法有任何建议?

1 个答案:

答案 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);

但假设您正确设置对象,那么您不应该这样做。

相关问题