android9之前(android8以及之前)的版本WebView不兼容H5部分界面,发生白屏的处理办法。

本文主要是介绍android9之前(android8以及之前)的版本WebView不兼容H5部分界面,发生白屏的处理办法。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:app需要用H5加载一个WebView网页,百度和淘宝等都可以加载,但是公司的前端写的部分H5无法加载成功,出现白屏。这个问题出现在android9之前,android9以及以后的版本呈现正常。查资料尝试过关闭掉硬件加速和setDomStorageEnabled 没效果。

webView.getSettings().setDomStorageEnabled(true);

后面用手机模拟器和云真机测试过很多机器,发现有极少数的android8机器上面不会出现白屏。所以就怀疑根本原因不是android版本导致的。曾经玩小米手机翻墙的时候,安装facebook等一些国外app的过程中,有过让下载webview apk的提示。于是我怀疑是不是存在webview的版本造成的。于是网上查,android的插件Android System WebView。 在开发者选项的里面是存在WebView的实现的

里面去查看版本

ok,然后我找测试机模拟器出现问题的进行统计,发现60以及以下的版本会有问题,64以及 以上的版本正常 ,61-63没条件测试。ok, 那就找到直接原因了。接下来如何解决?

方案1.查找原因H5进行兼容,能兼容最好啦

方案2.移动端进行处理。就是直接去检测这个webvIew的版本号,如果是64以下,那么就去更新最新的版本就行了对吧?如何更新呢,发现旧android系统的webView是跟随系统进行升级的,老版本并不会在应用市场提示更新。怎么办?了解到android的所有插件基本上就是一个apk,那么可不可以自己安装呢,于是在应用市场找到这个。Download Android System WebView APKs for Android

 于是进行下载,安装,发现Android System WebView已经更新到了安装的版本。ok, 那么就有思路了。在打开app的时候就去检测版本,如果版本太低了,就去根据版本去下载新的插件(插件放在自己的服务器上),安装就行了.下面是检测代码

    //获取所有包名public ArrayList<HashMap<String, Object>> getItems(Context context) {PackageManager pckMan = context.getPackageManager();ArrayList<HashMap<String, Object>> items = new ArrayList<HashMap<String, Object>>();List<PackageInfo> packageInfo = pckMan.getInstalledPackages(0);//注意 老版本webView包名是com.android.webview  后面的是com.google.android.webview  两个app都要去取 然后比较版本最新的那一个,判断是否需要更新for (PackageInfo pInfo : packageInfo) {if("com.android.webview".equals(pInfo.packageName)){//旧版本webView的包名Log.i("lishaobing-1",pInfo.packageName);Log.i("lishaobing-1",pInfo.versionCode+"");Log.i("lishaobing-1",pInfo.versionName);}if("com.google.android.webview".equals(pInfo.packageName)){//新安装版本webView的包名Log.i("lishaobing-1",pInfo.packageName);Log.i("lishaobing-1",pInfo.versionCode+"");Log.i("lishaobing-1",pInfo.versionName);}}

打印

 注意:我在测试华为机器的时候,发现有个版本号为70的,也显示白屏。所以关于是否兼容这个特例,就看各位了。这里提示下

方法2:比较简单用腾讯X5即可解决兼容性问题,低版本强制下载X5内核,

这篇关于android9之前(android8以及之前)的版本WebView不兼容H5部分界面,发生白屏的处理办法。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/367552

相关文章

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

SpringSecurity中的跨域问题处理方案

《SpringSecurity中的跨域问题处理方案》本文介绍了跨域资源共享(CORS)技术在JavaEE开发中的应用,详细讲解了CORS的工作原理,包括简单请求和非简单请求的处理方式,本文结合实例代码... 目录1.什么是CORS2.简单请求3.非简单请求4.Spring跨域解决方案4.1.@CrossOr

requests处理token鉴权接口和jsonpath使用方式

《requests处理token鉴权接口和jsonpath使用方式》文章介绍了如何使用requests库进行token鉴权接口的处理,包括登录提取token并保存,还详述了如何使用jsonpath表达... 目录requests处理token鉴权接口和jsonpath使用json数据提取工具总结reques

在C#中调用Windows防火墙界面的常见方式

《在C#中调用Windows防火墙界面的常见方式》在C#中调用Windows防火墙界面(基础设置或高级安全设置),可以使用进程启动(Process.Start)或Win32API来实现,所以本文给大家... 目录引言1. 直接启动防火墙界面(1) 打开基本防火墙设置(firewall.cpl)(2) 打开高

C# 空值处理运算符??、?. 及其它常用符号

《C#空值处理运算符??、?.及其它常用符号》本文主要介绍了C#空值处理运算符??、?.及其它常用符号,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、核心运算符:直接解决空值问题1.??空合并运算符2.?.空条件运算符二、辅助运算符:扩展空值处理

浅析Python中如何处理Socket超时

《浅析Python中如何处理Socket超时》在网络编程中,Socket是实现网络通信的基础,本文将深入探讨Python中如何处理Socket超时,并提供完整的代码示例和最佳实践,希望对大家有所帮助... 目录开篇引言核心要点逐一深入讲解每个要点1. 设置Socket超时2. 处理超时异常3. 使用sele

Python包管理工具uv下载python版本慢问题解决办法

《Python包管理工具uv下载python版本慢问题解决办法》uv是一个非常快的Python包和项目管理器,用Rust编写,使用热缓存安装Trio的依赖项的速度对比,:本文主要介绍Python包... 目录发现问题对于 MACOS / linux 用户 (zsh/bash):对于 Windows 用户:总

SpringMVC配置、映射与参数处理​入门案例详解

《SpringMVC配置、映射与参数处理​入门案例详解》文章介绍了SpringMVC框架的基本概念和使用方法,包括如何配置和编写Controller、设置请求映射规则、使用RestFul风格、获取请求... 目录1.SpringMVC概述2.入门案例①导入相关依赖②配置web.XML③配置SpringMVC

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法