3

我希望能够创建一个使用 WebView 从外部 Web 应用程序请求 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 映射到应用程序内的本地资源。

在此先感谢,莱昂

4

1 回答 1

1

为什么不从应用程序端加载所有 HTML?如果您担心此网页将无法访问网络 - 使用 WebView.loadDataWithBaseUrl 方法。

要将图像嵌入网页,您可以使用 data:URI 方案:http ://en.wikipedia.org/wiki/Data_URI_scheme

即使您是远程加载页面,您也可以映射您的应用程序图像。您可以使用 WebView.loadUrl("javascript:....") 通过 JavaScript 代码“发送”图像数据(也使用 data: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's MIME type...
    "UTF-8",               // and encoding
    "http://my.site.com/page.html");

现在 WebView 已经加载了您的页面。它是从本地资源加载的,但从 WebView 的角度来看,它就像是从网络加载的一样。loadData它也可以访问网络资源和在这里工作的 JavaScript 代码(这是和之间的主要区别loadDataWithBaseUrl)。

于 2011-03-18T11:40:41.967 回答