2013-04-08 32 views
7

Tôi có một ứng dụng web đơn giản được xây dựng với Phonegap và Android gọi các tài nguyên bên ngoài (js, css, html) từ máy chủ thay vì lưu trữ trong thư mục tài sản Phonegap. Tôi thích sử dụng các tài nguyên bên ngoài hơn vì máy chủ của tôi có thể phân phối các trang html tham gia quốc tế hóa phí.Ứng dụng web Android Phonegap HTML5 không hoạt động ngoại tuyến với tệp kê khai bộ nhớ cache

Ứng dụng web này hoạt động tốt trên thiết bị Android của tôi khi WIFI bật nhưng không thành công khi dừng WIFI. Tệp index.html do máy chủ của tôi phân phối chứa tệp kê khai hợp lệ với mimetype chính xác ('text/cache-manifest') liệt kê mọi tệp mà ứng dụng cần để hoạt động.

lớp Hoạt động Android của tôi là phải có bộ nhớ đệm cho phép:

this.appView.getSettings().setDomStorageEnabled(true); 
    this.appView.getSettings().setAppCacheMaxSize(1024 * 1024 * 15); 

    String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath(); 
    this.appView.getSettings().setAppCachePath(appCachePath); 
    this.appView.getSettings().setAllowFileAccess(true); 
    this.appView.getSettings().setAppCacheEnabled(true); 

Nó có thể đáng mentionning rằng việc sử dụng cuộc gọi ajax ứng dụng của tôi với các url như/aaa/bbb/gọi các trang web từ máy chủ và tôi don' T biết nếu đó có thể là vấn đề (tôi không gọi các trang vật lý trực tiếp như index.html) ... Tuy nhiên, ứng dụng web này hoạt động tốt trong trình duyệt máy tính để bàn (Google Chrome) khi ngoại tuyến ...

Bất kỳ ý tưởng nào tôi có thể làm gì để kích hoạt tính năng bộ nhớ cache HTML5 này trên ứng dụng Phonegap của mình?

Cảm ơn rất nhiều

Trả lời

6

Sau khi chơi xung quanh một lúc tôi nhận được nó để làm việc. Dưới đây là một số điểm bạn nên xác minh khi stucked với loại vấn đề bộ nhớ đệm:

  • Chăm sóc về các tham số url trôi qua với phương thức GET ... Tôi đã đi qua các thông số khi điều hướng giữa các trang ứng dụng của tôi và những thông số đã được làm các url của tôi khác với các url trong tệp kê khai làm cho bộ nhớ cache bị lỗi.
  • Khi kiểm tra chế độ ngoại tuyến trên điện thoại, tôi chỉ tắt WIFI nghĩ rằng điều này là đủ để kích hoạt phiên bản được lưu trong bộ nhớ ứng dụng của tôi nhưng không ... Tôi đang thử nghiệm ứng dụng của mình được xuất bản theo IP mạng cục bộ (như 192.168.2.11), có vẻ như ứng dụng của tôi đang cố gắng tiếp cận IP đó trên mạng 3G vẫn đang BẬT ... Vì vậy, hãy sử dụng chế độ trên máy bay khi thử nghiệm ngoại tuyến.
  • Không chắc chắn nếu điều này là cần thiết khi tôi đọc nó trên một số chủ đề khác nhưng tôi đổi tên tệp kê khai của tôi thành cache.manifest.

Trân

1

Dường như bạn cần "sửa ứng dụng gốc của Android Shell để bật bộ đệm HTML5".

Nếu bạn chưa có, xin vui lòng kiểm tra:

http://tmkmobile.wordpress.com/2012/03/04/html5-offline-solution/

+0

Cảm ơn nhưng điều này đã được thực hiện ... Bạn có thể thấy bản sửa lỗi trong câu hỏi của tôi –

1

Tôi đang phát triển một hệ thống tương tự. Những gì tôi đã làm là tôi đã tạo ra các trang web Phonegap và lưu trữ chúng trong thư mục www của máy chủ WAMP của tôi. Sau đó, những gì tôi làm là về cơ bản super.LoadURL ("insert_ip_address_here/insert_name_of_folder_where_webpage_is_located") trong phương thức onCreate và điều này tải ứng dụng phonegap một cách hoàn hảo (có tất cả những gì bạn cần chỉ là dòng mã trong chính ứng dụng Android). Tuy nhiên, bạn vẫn phải đảm bảo rằng tệp config.xml, tệp kê khai và tất cả các cấu hình cần thiết cho điện thoại được thực hiện đúng cách (để được hướng dẫn về điều này, xem http://www.google.ca/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CEAQFjAA&url=http%3A%2F%2Fwww.adobe.com%2Fdevnet%2Fhtml5%2Farticles%2Fgetting-started-with-phonegap-in-eclipse-for-android.html&ei=XfBuUcmKNu684AP3vYDQBw&usg=AFQjCNG16oUTDylMqz20YiiMZTlDxrfbPg&bvm=bv.45368065,d.dmg).

Hãy cho tôi biết nếu con đường này bạn chọn theo đuổi. Tôi có thể cung cấp hỗ trợ thêm với những thứ như tạo địa chỉ ip (trong dòng super.loadurl (...)) động cho hệ thống cục bộ bằng cách sử dụng đa đúc, v.v.

+0

Có, đây là những gì tôi đang làm, tôi gọi index.html từ xa của tôi với super.LoadURL (url http của tôi) trong phương thức onCreate. Nếu bạn kiểm tra câu hỏi của mình, tôi cũng xác định các cài đặt khác nhau để bật bộ nhớ đệm theo cùng phương thức này ... –

+0

Thú vị, bộ nhớ đệm sẽ giúp ứng dụng chạy nhanh hơn? (Im suy nghĩ về việc thực hiện nó trong mã của riêng tôi). – aagarwal

Các vấn đề liên quan