在 WebView 中加载页面之前,用本地 Android 资源替换 HTML 文档的图像

Posted

技术标签:

【中文标题】在 WebView 中加载页面之前,用本地 Android 资源替换 HTML 文档的图像【英文标题】:Replace images of a HTML document with local Android resources, before loading the page in a WebView 【发布时间】:2014-12-10 16:42:28 【问题描述】:

我知道出于安全原因,html 标准不再允许将本地资源作为图像加载到文档中。 无论如何,我发现如果我想在 WebView 中加载本地页面,我必须复制 android-asset 项目文件夹中的 html 文件。

如果我想使用混合方法怎么办? 我想从 uri 中获取 HTML 文档,用本地路径替换 img HTML 标记的 src 属性的值,然后在 WebView 中加载代码。

有一个像这样的 html 文档:

<hmtl>
    <head>
    </head>

    <body>
        <img src="http://URL-SITE/img/x.jpg">
    </body>
</hmtl>

如何将http://URL-SITE/img替换为本地图片资源的路径 页面由 WebView 加载之前?

我已经尝试将本地图像放入文件夹android-asset 并更改file:///android_asset/img/x.jpg 中的src 值,但没有成功。

【问题讨论】:

您始终可以使用 &lt;img src="data:image/png;base64,..." /&gt; 语法将图像数据嵌入到 HTML 本身中 您必须先使用http客户端获取页面的来源。然后解析 src 属性 urls 并用文本替换资产中文件的 urls。您的资产网址没问题。但是您必须将图片放在资产目录中。不在你命名的那个。最后将适配后的html源码交给webview。 问题是我不想下载图片,因为我已经有了它们,我不希望用户使用他的移动数据。 【参考方案1】:

好的,谢谢 cmets。 问题是我使用了命令 loadData

String html ="<html> <head></head> "
              +" <body>  <img src=\"file:///android_asset/img/x.jpg\"> "
              +"</body> </html>"; 

myWebView.loadData(html, "text/html; charset=UTF-8", null);

而不是

myWebView.loadDataWithBaseURL(null, html, "text/html", "UTF-8", null);

【讨论】:

以上是关于在 WebView 中加载页面之前,用本地 Android 资源替换 HTML 文档的图像的主要内容,如果未能解决你的问题,请参考以下文章

在同一个 webView 中加载不同页面的按钮

如何在 Android Webview 中加载网页之前注入 javascript?

Android WebView 未从缓存中加载第二页

在webView android中加载本地html文件

NativeScript WebView 在 src 文档中加载本地资源

如何在 Android WebView 中加载本地图像