【问题标题】:Android Webview shouldOverrideUrlLoading() is not called for base64 image data URL不为 base64 图像数据 URL 调用 Android Webview shouldOverrideUrlLoading()
【发布时间】:2016-01-11 08:37:38
【问题描述】:

在我的 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 这样的图像 URL。但是对于我的 base 64 数据 URL,它仅适用于 4.4 以下的 Android 版本,Android 4.4+ 上永远不会调用方法 shouldOverrideUrlLoading(),因为它必须是根据 Android API Guides 的有效 URL。

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

任何建议都将受到高度赞赏,我所需要的只是将图像保存在 Android 中。

【问题讨论】:

  • 认为 href 应该以协议符号开头。试试 data://。

标签: android html image webview


【解决方案1】:

如果您需要为您的 data: URI 触发 shouldOverrideUrlLoading,只需从您的 &lt;a&gt; 标记中删除 download="fileName.jpg" target="_blank" 部分。

实际上,是download 属性阻止了shouldOverrideUrlLoading 被调用,但是拥有target="_blank" 并没有任何帮助,因此也应该将其删除。您只需从 shouldOverrideUrlLoading 返回 true 即可避免 WebView 实际导航到图片链接。

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

但是,当您遵循 Download Images using android webview 的建议时,您将面临的下一个问题是 DownloadManager 不适用于数据:URI :) 您可以做的只是使用 @ 转换 base64 编码的图像987654323@ 到二进制 blob 中,然后自己保存 - 这样,您将有效地下载图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多