2013-02-11 34 views
5

Tôi đang cố gắng để đọc một tập tin địa phương trong PhoneGap để nạp chuỗi ngôn ngữ cho ứng dụng và tôi không thể làm cho nó hoạt :(đọc tập tin địa phương trong PhoneGap

Mã này khá đơn giản:

var pathToLocalFile = "/home/user/android/assets/www/js/"; 
var langCache = new FileReader(); 
langCache.onload = function(data){ 
    col = JSON.parse(data); 
    refreshAllStrings(); 
}; 
langCache.onerror = function(err){ 
    debug.error(err); 
}; 
langCache.readAsText(pathToLocalFile+currentLang+'.json'); 

mã này không hoạt động trên các giả lập Ripple và tôi thay thế nó với

var pathToLocalFile = "file:///android_asset/www/js/"; 

trong trường hợp của android, với kết quả tương tự:

Uncaught TypeError: Object #<Console> has no method 'warning' cordova-2.4.0.js:2616 
initRead cordova-2.4.0.js:2616 
FileReader.readAsText cordova-2.4.0.js:2660  
loadLanguage 

Trong trình giả lập Ripple, tôi khởi động Chrome với google-chrome -–allow-file-access-from-files và cấu hình và tệp kê khai Android có tất cả quyền và plugin được đặt.

Tất nhiên tôi thiếu điều gì đó, nhưng bất kỳ ý tưởng nào về điều này có thể là gì?

Trân trọng.

+0

Xin lỗi, để trả lời bạn tốt hơn, tôi chỉ cần làm rõ một điều. Bạn đang cố gắng đọc một tệp JS mà bạn đang đưa vào trong thư mục www của ứng dụng Android của bạn? –

+0

yep, chính xác, đó là những gì tôi muốn, một cách để tự động tải tệp trong gói ứng dụng (tôi cho rằng FileRead sẽ hoạt động, tôi đang mở cho bất kỳ đề xuất nào khác) –

+0

Vâng, FileReader không có quyền truy cập vào các tệp được đóng gói cùng với ứng dụng. Đọc những tập tin đó được thực hiện tốt nhất thông qua AJAX theo câu trả lời @codemonkey. –

Trả lời

5

Nếu tệp nằm trong thư mục www của ứng dụng, bạn không cần thêm '/ home/..' hoặc 'file: ///'. Bạn chỉ có thể tải nội dung bằng cách tìm nạp "AJAX" mặc dù nó được gói trong ứng dụng.

$.get('js/filename.ext'); 
+0

điều này làm việc trên giả lập Android nhưng không phải trong gợn (sẽ là tuyệt vời nếu tôi có thể làm cho nó làm việc trên gợn, là terribly chậm để thực hiện một thay đổi, biên dịch và chạy giả lập trên android :() –

+1

cố định nó, thay đổi chính sách tên miền chéo của gợn hoạt động: D –

+0

Làm cách nào để ghi vào tệp cục bộ này? –

1

Lỗi bạn đang thấy thực sự là kết quả của cordova-2.4.0.js gọi phương thức "cảnh báo" không tồn tại. Nó phải là console.warn. Nó đang cố gắng cảnh báo bạn rằng việc sử dụng chuỗi cho phương thức readAsText hiện không còn được dùng nữa và bạn nên sử dụng tham chiếu Tệp để thay thế.

Điều gì sẽ xảy ra là giao diện điều khiển.warn của "Sử dụng đối số chuỗi có chức năng FileReader.readAs không được chấp nhận".