Я использую 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?