Загрузите веб-приложение в веб-просмотр, используя локальные пути для изображений, хранящихся в приложении. - PullRequest
2 голосов
/ 18 марта 2011

Я хочу иметь возможность создавать приложение, которое использует WebView для запроса URL-адреса от внешнего веб-приложения, которое возвращает HTML и CSS, которые ссылаются на изображения, которые являются активами в реальном приложении.Идея в основном состоит в том, чтобы ускорить все, чтобы изображения никогда не загружались.

Вот упрощенный пример:

Сервер HTML:

<html> 
  <head> 
  <style> 
     #myImage { background-image: url("file:///android_asset/myImage.jpg"; width: 50px; height: 50px;} 
  </style> 
  </head> 
  <body> 
    <div id="myImage"></div> 
  </body> 
</html>

Итак, есть ли способ сделать это?Моя главная цель - просто заставить приложение запрашивать весь HTML-код с сервера, но при этом иметь возможность сопоставлять URL-адреса изображений с локальными ресурсами приложения.

Заранее спасибо, Леон

1 Ответ

1 голос
/ 18 марта 2011

Почему бы не загрузить весь HTML со стороны приложения? Если вы беспокоитесь, что эта веб-страница не будет иметь доступа к сети - используйте метод WebView.loadDataWithBaseUrl.

Для встраивания изображений в веб-страницу вы можете использовать данные: URI схема: http://en.wikipedia.org/wiki/Data_URI_scheme

Также вы можете отобразить изображения вашего приложения, даже если ваша страница загружена удаленно. Вы можете использовать WebView.loadUrl ("javascript: ....") для "отправки" данных изображений с помощью кода JavaScript (также с использованием схемы data: URI).

EDIT.

Во-первых, на стороне HTML ваш пример со встроенными изображениями будет выглядеть примерно так:

<html> 
  <head> 
  <style> 
     #myImage { background-image: url('data:image/png;base64,iVBORw0KG.....'); width: 50px; height: 50px;} 
  </style> 
  </head> 
  <body> 
    <div id="myImage"></div> 
  </body> 
</html>

Когда, если вы хотите сохранить эту страницу на стороне приложения, вы можете сохранить ее где-нибудь (строковый ресурс, папка ресурсов) и когда получите ее.

String pageResource = // get it somehow
WebView myWebView;

myWebView.loadDataWithBaseUrl(
    "http://my.site.com",  // The base url
    pageResource,          // page content to load...
    "text/html",           // it's MIME type...
    "UTF-8",               // and encoding
    "http://my.site.com/page.html");

Теперь WebView загрузил вашу страницу. Он загружается из локальных ресурсов, но с точки зрения WebView он загружается из сети. Здесь также есть доступ к сетевым ресурсам и коду JavaScript (это основное отличие между loadData и loadDataWithBaseUrl).

...