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

Я хочу, чтобы иметь возможность создавать приложение, которое использует 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-адреса изображений с локальными ресурсами в приложении.

Спасибо заранее, Leon

Ответ 1

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

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

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

ИЗМЕНИТЬ.

Во-первых, со стороны 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 MIME type...
    "UTF-8",               // and encoding
    "http://my.site.com/page.html");

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