2014-05-23 48 views
0

我最近更新到科爾多瓦3.4.1然後我開始構建和測試我的項目,發現它有問題。我花了一天半的時間試圖恢復和重建項目,以便它能夠正常工作。我迄今爲止所嘗試的任何東西都沒有奏效科爾多瓦requestFileSystem不再被加載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(); 

什麼香港專業教育學院的嘗試:

    使用以下科爾多瓦版本3.3.1
  • 我用盡, 3.4.0,3.4.1,3.5.0
  • 我試過使用老版本的t他文件API 1.0.0,1.0.1,1.1.0
  • 我試圖從頭開始創建一個新的項目
  • 我試圖用建立API版本17,19
  • 我曾嘗試在Android 4.2測試.2和4.4.2

我已驗證插件已加載到項目中,並且它已構建到設備上。 Im使用Android SDK附帶的monitor.bat來觀察控制檯事件和錯誤,並且requestFileSystem只是沒有被注入。

我已經嘗試使用(由here的建議):

location.reload() 

location.reload(true) //not from cache 

,看看是否有與科爾多瓦插件初始化錯誤,但沒有什麼。

有沒有人有什麼可以解決這個問題的更多建議?

+0

你得到的具體錯誤是什麼? –

+0

我用錯誤和代碼示例更新了問題 – Chausser

+0

您的'this.loadConfig'方法中有什麼?此外,它將是'LocalFileSystem.PERSISTENT',而不是'window.PERSISTENT'。 –

回答

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

但你不應該真的要做到這一點,假設你正確設置你的對象。