У меня здесь действительно неприятная проблема. Каждый раз, я пытаюсь использовать плагины файлов и файлов в моем проекте, я получаю Uncaught TypeError: Не удается прочитать свойство 'dataDirectory' неопределенной ошибки, пытаясь получить каталог данных с store = cordova.file.dataDirectory;
. Теперь я пытался решить свою проблему часами, но я не мог найти никакой помощи. Я также использую плагин Barcode Scanner в этом проекте, и он работает как шарм. Я использую PhoneGap 3.6.3 и jQuery Mobile 1.4.4. Так как я новичок в PhoneGap, вполне вероятно, что я что-то важное не хватает ...PhoneGap Сборка: плагины не работают (получение «неопределенных» ошибок) на Android
Я включил плагины в моей 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" />
Может быть, это может быть hint: Журнал PhoneGap Build для Windows Phone подтверждает добавление плагинов. Но похоже, что они не добавляются в сборку Android, так как я не могу найти их в журнале сборки.
Windows Phone Log:
Adding www\plugins\org.apache.cordova.file-transfer\www\FileTransfer.js
Adding www\plugins\org.apache.cordova.file-transfer\www\FileTransferError.js
Adding 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...]
};
Я также включил файл в phonegap.js в моей index.html:
<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>
Я действительно надеюсь, что кто-то может помочь мне решить мою проблему.
Спасибо за ваш ответ. Я применил вашу модификацию, и теперь она говорит: 'Uncaught ReferenceError: LocalFileSystem не определен'. : D – tyso89
О, извините, скопировал его из моего производственного кода, где _LocalFileSystem.PERSISTENT_ равно 1, поэтому, пожалуйста, измените его на 1, чтобы исправить это. –
К сожалению, это не решило проблему. Есть ли у вас другая идея? Я не могу думать прямо. Но завтра я вернусь. Может быть, мне придется сводить код только к материалам 'cordova.file' и' cordova.file-transfer', чтобы найти проблему. – tyso89