对于base64图像数据URL,不调用Android Webview shouldOverrideUrlLoading()

时间:2015-10-13 14:28:05

标签: android html image webview

在我的WebView中,它会加载一个网页,其中包含一个用base64数据下载图像的链接:

<a href="data:image/jpeg;base64,{base64data}" download="fileName.jpg" target="_blank">Download Image</a>

在Chrome中点击它时,它会将图像下载为JPG文件。但它在Android WebView中不起作用。

Download Images using android webview表示我应该使用shouldOverrideUrlLoading()来触发下载。

它适用于像http://.../image.jpg这样的图片网址。但对于我的base 64数据网址,它仅适用于4.4以下的Android版本,方法shouldOverrideUrlLoading()永远不会在Android 4.4+上调用,因为根据Android API Guides,它必须是有效的网址。

所以我的问题是,为什么data:image/jpeg;base64,{base64data}在这种情况下不是有效的网址?如何触发base64数据网址shouldOverrideUrlLoading()? (或甚至在网页上进行更改)

任何建议都会受到高度赞赏,我只需要在Android中保存图片。

1 个答案:

答案 0 :(得分:2)

如果您需要为您的数据触发shouldOverrideUrlLoading:URI,只需从download="fileName.jpg" target="_blank"标记中删除<a>部分即可。

实际上,download属性阻止shouldOverrideUrlLoading被调用,但target="_blank"对任何事情都没有帮助,所以它也应该删除。您只需要从true返回shouldOverrideUrlLoading,以避免WebView实际导航到图片链接。

我想,这种行为的解释是图像由WebView内部处理,因此不考虑下载,请参阅 DownloadListener doesn't download images?但我同意让download属性在KitKat之前工作有点奇怪。

但是,当您按照Download Images using android webview的建议时,您面临的下一个问题是DownloadManager无法处理数据:URIs :)您可以做的只是使用Base64 utils将base64编码的图像转换为二进制blob,并自行保存 - 这样,您就可以有效地下载图像。