我在这里遇到了一个非常讨厌的问题。每次,我尝试在我的项目中使用文件和文件传输插件,我得到 Uncaught TypeError:无法读取属性' dataDirectory'尝试使用store = cordova.file.dataDirectory;
获取数据目录时出现未定义的错误。现在,我一直试图解决我的问题几个小时,但我找不到任何帮助。我也在这个项目中使用Barcode Scanner插件,它的工作就像一个魅力。我正在使用PhoneGap 3.6.3和jQuery Mobile 1.4.4。由于我是PhoneGap的新手,我很可能错过了一些重要的东西...
我在config.xml中包含了这样的插件:
<gap:plugin name="org.apache.cordova.file" version="1.3.1" />
<gap:plugin name="org.apache.cordova.file-transfer" version="0.4.6" />
也许这可能是一个暗示:Windows Phone的PhoneGap Build日志确认正在添加插件。但似乎它们没有被添加到Android版本中,因为我无法在构建日志中找到它们的任何引用。
Windows Phone日志:
添加www \ plugins \ org.apache.cordova.file-transfer \ www \ FileTransfer.js
添加www \ plugins \ org.apache.cordova.file-transfer \ www \ FileTransferError.js
添加www \ plugins \ org.apache.cordova.file \ www \ File.js
这是我的index.js的一部分,不包括条形码扫描功能。
var app = {
// Application Constructor
initialize: function() {
this.bindEvents();
},
// Bind Event Listeners
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
document.getElementById('download').addEventListener('click', this.downloadFile, false);
document.getElementById('scan').addEventListener('click', this.scan, false);
document.getElementById('encode').addEventListener('click', this.encode, false);
},
onDeviceReady: function() {
app.receivedEvent('deviceready');
},
// Update DOM on a Received Event
receivedEvent: function(id) {
var parentElement = document.getElementById(id);
var listeningElement = parentElement.querySelector('.listening');
var receivedElement = parentElement.querySelector('.received');
listeningElement.setAttribute('style', 'display:none;');
receivedElement.setAttribute('style', 'display:block;');
console.log('Received Event: ' + id);
},
downloadFile: function(){
//The directory to store data
var store;
//Used for status updates
var $status;
//URL of our asset
var assetURL = "https://www.dropbox.com/s/d4s8mnkfwdqylns/test.txt?dl=0";
//File name of our important data file we didn't ship with the app
var fileName = "test.txt";
document.addEventListener("deviceready", init, false);
function init() {
$status = document.querySelector("#fileStatus");
$status.innerHTML = "Checking for file";
store = cordova.file.dataDirectory;
//Check for the file.
window.resolveLocalFileSystemURL(store + fileName, appStart, downloadAsset);
}
function downloadAsset() {
var fileTransfer = new FileTransfer();
console.log("About to start transfer");
fileTransfer.download(assetURL, store + fileName,
function(entry) {
console.log("Success!");
appStart();
},
function(err) {
console.log("Error");
console.dir(err);
});
}
function appStart() {
$status.innerHTML = "Datei aktuell";
}
},
// [...Functions for Barcode scanner...]
};
我还在index.html中包含了phonegap.js文件:
<body>
...
<script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
<script type="text/javascript" src="js/index.js"></script>
<script type="text/javascript">
app.initialize();
</script>
</body>
我真的希望有人可以帮我解决问题。
答案 0 :(得分:2)
我一直认为你需要先打电话
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, onError);
cordova.file 要定义的东西,并且能够调用 resolveLocalFileSystemURL 。
所以在你的情况下,试试这个修改
function onFileSystemSuccess() {
store = cordova.file.dataDirectory;
//Check for the file.
window.resolveLocalFileSystemURL(store + fileName, appStart, downloadAsset);
}
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, onError);