webview 不显示图片

本文解决了在Android WebView中加载HTTP图片不显示的问题,通过设置WebSettings参数并针对不同SDK版本进行适配。

今天遇到一个问题就是在使用WebView加载网页的时候图片不显示,当这个问题一出现我就想当然的以为是后端提供和H5页面的问题。

可蛋疼的是在IOS中显示是正常的,这就。。。。

我当时就想是不是因为图片是HTTPS的原因,可是我代码里有设置信任证书,而且如果即使是HTTPS的问题也应该显示一个空白吧。是不是给WebView少设置的什么东西。然后百度一下: 

settings.setJavaScriptEnabled(true); 
settings.setDomStorageEnabled(true);
settings.setBlockNetworkImage(false);//同步请求图片

设置后发现还是不能显示图片。 然后将h5url放到浏览器跟踪查找图片url 发现确实http的。推测是不是SDK版本问题?

然后设置了

if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){ 
    settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
运行后发现OK!

在使用 WebView2 控件时,如果遇到加载本地图片失败的问题,可以尝试以下几种解决方法: 1. **设置浏览器参数以允许文件访问** 在创建 WebView2 控件之前,可以通过设置环境变量或直接指定额外的浏览器参数来启用文件访问权限。例如,在代码中添加如下参数: ```cpp std::wstring args; args.append(L"--allow-file-access-from-files --disable-web-security"); auto options = Microsoft::WRL::Make<CoreWebView2EnvironmentOptions>(); options->put_AdditionalBrowserArguments(args.c_str()); ``` 这样可以允许从本地文件系统加载资源,同时禁用部分安全限制,有助于解决图片加载失败的问题 [^2]。 2. **使用 `loadDataWithBaseURL` 方法** 如果加载的是本地 HTML 文件中的图片,可以尝试使用 `loadDataWithBaseURL` 方法,并为 HTML 内容提供一个基础 URL。例如: ```java webView.loadDataWithBaseURL("file:///android_asset/", htmlContent, "text/html", "UTF-8", null); ``` 这种方法可以确保 WebView 正确解析 HTML 中的相对路径,从而正确加载本地图片 [^4]。 3. **检查文件路径和权限** 确保图片文件的路径是正确的,并且应用程序具有访问该路径的权限。在 Android 平台上,可能需要请求存储权限才能访问外部存储中的文件。此外,某些设备(如小米、一加)在较新版本的 Android 系统上(如 Android 12)可能会对文件访问有更严格的限制,需特别注意权限配置 [^3]。 4. **使用 `file:///` 前缀** 虽然部分开发者反映使用 `file:///` 前缀无效,但在某些情况下仍然有效。可以尝试将图片路径替换为 `file:///` 格式,例如: ```html <img src="file:///sdcard/images/local_image.jpg"> ``` 如果仍然无法加载,可能是由于 WebView 的安全策略限制,此时可以结合其他方法(如设置浏览器参数)一起使用 [^1]。 5. **调试与日志分析** 在开发过程中,可以通过 WebView2 的调试工具(如 DevTools)查看网络请求和控制台日志,以确定图片加载失败的具体原因。这有助于识别是路径问题、权限问题还是其他安全限制导致的加载失败 [^2]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值