2012-06-26 6 views
3

Я использую HTML5 AppCache для создания веб-приложения Android, которое может работать в автономном режиме. HTML, который создает дополнительные изображения, таблицы стилей, javascript и iframe, загружается в WebView с помощью loadDataWithBaseURL(). К сожалению, когда устройство находится в автономном режиме, из AppCache загружается только HTML, полученный в iframe.Webview AppCache не загружает контент, не содержащий html

На данный момент, я знаю:

  • Это содержание не существует в AppCache, так как я вывалил содержимое из AppCache.db файла с ADB оболочки и найти все содержание там.
  • Это, вероятно, не проблема домена, так как я указываю правильный путь в поле baseUrl loadDataWithBaseURL(). Кроме того, обходной путь к этой проблеме удается без ошибок домена, как обсуждается ниже.

Вот некоторые демо-код:

public class ExampleActivity extends Activity { 

    ... 

    // HTML to be inserted into the Webview with loadDataWithBaseURL() 
    public static final String ALL_HTML = 
     "<!DOCTYPE HTML><html>" + 
     "<head><script src='sourced_js.js' " + 
     "onload='console.log(\"sourced_js.js onload\");'>" + 
     "</script>" + 
     "<link rel='stylesheet' href='style.css' />" + // doesn't load offline 
     "</head><body>" + 
     "<iframe src='manifest.html'></iframe>" +  // loads 
     "<img src='android.jpg' />" +     // doesn't load 
     "<img src='android.gif' />" +     // doesn't load 
     "</body></html>"; 

    public void onCreate(Bundle savedInstanceState) { 

    ... 

    WebView webView = new WebView(context); 
    webView.clearCache(true); 

    WebSettings settings = webView.getSettings(); 
    settings.setAppCacheEnabled(true); 
    settings.setJavaScriptEnabled(true); 

    webView.loadDataWithBaseURL("http://my.website.com/path/to/content/", 
     ALL_HTML, "text/html", "utf-8", null); 
    } 
} 

manifest.html только ответственность за ссылки на манифест. Это выглядит следующим образом:

<html manifest="manifest.appcache"> 
<head></head> 
<body></body> 
</html> 

manifest.appcache выглядит следующим образом:

CACHE MANIFEST 

# Explicitly cached resources 
# manifest.html automatically cached 
sourced_js.js 
android.jpg 
android.gif 
style.css 

NETWORK: 
* 

В оперативном режиме все загрузки содержимого. В автономном режиме загружается только iframe с manifest.html. Изображения, таблицы стилей и javascript не загружаются.

Как ни странно, если бы я источник тот же статический контент (sourced_js.js, android.jpg, ...) в manifest.html, они все нагрузки от AppCache в IFRAME правильно, когда устройство отсутствует! Как будто эти другие ресурсы должны быть получены вторично со статической страницы.

Любая подсказка, почему этот контент не будет загружен из AppCache?

ответ

1

Appcache не должен работать, если вы не задали правильный параметр ответа типа MIME (текст/кэш-манифест) для файлов * .appcache на вашем веб-сервере в соответствии со спецификациями.

Такое же поведение ожидается в настольных браузерах, мобильных браузерах и iOS UIWebView.

Смежные вопросы