webview 图片不显示问题总结

本文总结了WebView在加载网页时遇到图片不显示的问题,重点指出在Android 5.0以下版本中,需要设置setting.setBlockNetworkImage(false)来解决此类问题,确保JavaScript的启用也是关键。

1 webview 加载url 需要setJavaScriptEnabled(true);
2图片不显示问题
a. 解决方案 : setting.setBlockNetworkImage(false);
使用场景 : 安卓5.0一下使用

b.  解决方案 : setting.setBlockNetworkImage(false); 
	 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        // 解决http及https混合情况下页面加载问题
        MIXED_CONTENT_NEVER_ALLOW:Webview不允许一个安全的站点(https)去加载非安全的站点内容(http),比如,https网页内容的
        图片是http链接。强烈建议App使用这种模式,因为这样更安全。										
		MIXED_CONTENT_ALWAYS_ALLOW:在这种模式下,WebView是可以在一个安全的站点(Https)里加载非安全的站点内容(Http),这是
		WebView最不安全的操作模式,尽可能地不要使用这种模式。		
		MIXED_CONTENT_COMPATIBILITY_MODE:在这种模式下,当涉及到混合式内容时,WebView会尝试去兼容最新Web浏览器的风格。一
		些不安全的内容(Http)能被加载到一个安全的站点上(Https),而其他类型的内容将会被阻塞。这些内容的类型是被允许加载还是被阻塞可
		能会随着版本的不同而改变,并没有明确的定义。这种模式主要用于在App里面不能控制内容的渲染,但是又希望在一个安全的环境下运行。

	  setting.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
     }
     原因 : android webview 从Lollipop(5.0)开始webview默认不允许混合模式,https当中不能加载http资源
     使用场景 : 安卓5.0 以上  8.0 以下使用
     
c.  解决方案  : setting.setBlockNetworkImage(false);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        // 解决http及https混合情况下页面加载问题
        setting.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
     }
     原因 : 8.0以上默认禁用了http
	 android:usesCleartextTraffic="true" (需要加在androidmainfest 文件application下)
	 使用场景 : 8.0以上使用
<think>好的,我现在需要解决用户提出的WebView加载HTTP网站显示问题。首先,我得回忆一下用户提到的引用内容,虽然这些引用可能是完全相关,但可能有帮助。用户之前提到了混合内容模式、显示全的问题以及HTTPS加载HTTP图片的解决方案。 首先,用户的问题是加载HTTP网站显示,可能涉及到几个方面。现在大多数网站都转向HTTPS,但HTTP仍然存在。过,从Android 9(API 28)开始,默认禁止HTTP明文传输,这可能导致WebView无法加载HTTP内容。所以第一步应该是检查应用的网络安全配置。 然后,混合内容模式的问题。如果网站是HTTPS,但内部加载了HTTP资源,可能需要设置setMixedContentMode。过用户的问题是关于加载整个HTTP网站,所以可能更直接的是HTTP的权限问题。 另外,WebView的配置是否正确,比如JavaScript是否启用,因为有些网站依赖JS。还有是否启用了DOM存储等设置,可能影响页面渲染。 然后,参考用户提供的引用,引用[1]提到在混合内容时设置MIXED_CONTENT_ALWAYS_ALLOW,这可能适用于HTTPS网站加载HTTP资源的情况。但用户的问题可能是混合内容,而是直接加载HTTP网站,所以可能需要调整网络安全配置。 引用[3]中的终极解决方案提到了shouldInterceptRequest方法,这可能用于处理请求拦截,比如将HTTP资源替换成HTTPS,或者处理证书问题,但需要具体分析。 另外,检查AndroidManifest.xml中的usesCleartextTraffic属性,是否允许应用使用明文流量。对于Android 9及以上,默认是禁止的,需要显式设置允许。 总结可能的解决方案步骤: 1. 在AndroidManifest.xml中允许明文流量,设置android:usesCleartextTraffic="true"。 2. 配置WebView的混合内容模式,允许加载HTTP资源,即使主页面是HTTP,但如果有混合内容可能需要这个设置。 3. 检查WebView的基础设置,如启用JavaScript。 4. 处理网络权限,确保应用有INTERNET权限。 5. 针对Android 9及以上,可能需要网络安全配置,允许HTTP域名。 需要分步骤验证这些可能性,确保用户的问题得到解决。同时,用户可能在旧版本或新版本Android上遇到同的问题,所以解决方案需要覆盖同情况。</think>针对WebView加载HTTP网站显示问题,以下是分步解决方案: --- ### **1. 允许明文流量配置** 从Android 9(API 28)开始默认禁止明文HTTP流量,需在`AndroidManifest.xml`中添加以下配置: ```xml <application android:usesCleartextTraffic="true" ...> </application> ``` 此配置允许应用通过HTTP协议加载网络资源[^1]。 --- ### **2. 设置混合内容模式** 即使主页面是HTTP协议,若页面包含HTTPS资源时需设置混合模式: ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); } ``` 此设置允许HTTP页面加载HTTPS资源(或反向兼容)[^1][^3]。 --- ### **3. 检查基础WebView配置** 确保WebView启用了必要的功能: ```java webView.getSettings().setJavaScriptEnabled(true); // 启用JS webView.getSettings().setDomStorageEnabled(true); // 启用DOM存储 webView.getSettings().setLoadsImagesAutomatically(true); // 自动加载图片 ``` --- ### **4. 网络安全策略配置(Android 9+)** 在`res/xml/network_security_config.xml`中定义允许的HTTP域名: ```xml <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">yourdomain.com</domain> </domain-config> </network-security-config> ``` 并在`AndroidManifest.xml`中引用: ```xml <application android:networkSecurityConfig="@xml/network_security_config" ...> </application> ``` --- ### **5. 权限检查** 确保应用已声明网络权限: ```xml <uses-permission android:name="android.permission.INTERNET" /> ``` --- ### **6. 使用自定义WebViewClient处理重定向** 部分HTTP网站需要处理重定向或证书错误: ```java webView.setWebViewClient(new WebViewClient() { @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); // 忽略SSL证书错误(慎用) } @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { view.loadUrl(request.getUrl().toString()); // 强制在当前WebView加载 return true; } }); ``` --- ### **验证步骤** 1. 检查`AndroidManifest.xml`是否允许明文流量 2. 确保WebView混合模式配置生效 3. 使用调试工具检查控制台错误(如`chrome://inspect`) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值