未针对base64图像数据URL调用Android Webview shouldOverrideUrlLoading()

流亭

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

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

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

使用android webview下载图片表示我应该使用它shouldOverrideUrlLoading()来触发下载。

它适用于图像网址,例如http://.../image.jpg但是对于我的基本64数据URL,它仅适用于4.4以下的Android版本,该方法shouldOverrideUrlLoading()从未在Android 4.4+上调用,因为根据Android API指南,它必须是有效的URL

所以我的问题是,为什么data:image/jpeg;base64,{base64data}在这种情况下不是有效的URL?我应该怎么做才能触发shouldOverrideUrlLoading()base64数据URL?(或者甚至通过在网页上进行更改)

任何建议将不胜感激,我所需要的只是将图像保存在Android中。

米哈伊尔·纳加诺夫(Mikhail Naganov)

如果您需要触发shouldOverrideUrlLoading数据:URI,只需将其download="fileName.jpg" target="_blank"<a>标签中删除即可

实际上,download是阻止shouldOverrideUrlLoading调用属性的属性,但是拥有target="_blank"什么也无济于事,因此也应将其删除。你只需要返回trueshouldOverrideUrlLoading以避免实际网页视图导航到图片链接。

我猜想,这种现象的原因是图像是由WebView在内部处理的,因此不考虑将其下载,请参阅DownloadListener是否不下载图像?但是我同意让download属性在KitKat之前起作用有点奇怪

但是,当您遵循“使用android webview下载图像”中的建议时,您将面临的下一个问题DownloadManager不适用于数据:URIs :)您可以做的只是使用Base64 utils将base64编码的图像转换为二进制文件。 blob,然后自己保存-这样,您就可以有效地下载图像。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章