欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

解决WebView通过URL加载H5界面出现空白的问题

程序员文章站 2024-02-06 20:06:13
1.权限问题:在配置文件中需要设置网络权限2.基本配置问题web...

1.权限问题:在配置文件中需要设置网络权限

<uses-permission android:name="android.permission.internet" />

2.基本配置问题

websettings websettings = webview.getsettings(); //支持缩放,默认为true。

.setusewideviewport(true); // 缩放至屏幕的大小 websettings

.setloadwithoverviewmode(true); //设置默认编码

websettings .setdefaulttextencodingname("utf-8"); ////设置自动加载图片

websettings .setloadsimagesautomatically(true);

.settings.setjavascriptenabled(true);// 设置可以运行js脚本
.settings.setsupportzoom(false);// 用于设置webview放大
.settings.setbuiltinzoomcontrols(false);

3.出现uncaught typeerror: cannot call method 'getitem' of null异常

这个行出现了异常,这个正是html5的特性,一个本地存储的东西,存储量比cookie大,但是这个必须在android的webview用代码启动才行

解决方法:启动webview的html5的本地存储功能。

webview.getsettings().setdomstorageenabled(true);

webview.getsettings().setappcachemaxsize(1024*1024*8);

string appcachepath = getapplicationcontext().getcachedir().getabsolutepath();

webview.getsettings().setappcachepath(appcachepath);

webview.getsettings().setallowfileaccess(true);

webview.getsettings().setappcacheenabled(true);

4.调用getdeviceid 方法的时候,js没有加载完毕,导致出现空白

解决办法:

webview.setwebviewclient(new webviewclient() {
@override
public boolean shouldoverrideurlloading(webview view, string url) {
view.loadurl(url);
return true;
}

@override
public void onpagefinished(webview view, string url) {
super.onpagefinished(view, url);
//在这里执行你想调用的js函数
if(!flag_get_deviceid){
load();
}
}

@override
public void onreceivederror(webview view, int errorcode, string description, string failingurl) {
super.onreceivederror(view, errorcode, description, failingurl);
}

});

private boolean flag_get_deviceid=false;
public void load(){
string key="";
string androidid="";
try{
androidid = secure.getstring(getcontentresolver(),secure.android_id);
log.d(tag, "androidid:"+androidid);}catch(exception e){
log.e(tag, "");
}finally{
string script=string.format("javascript:getdeviceid('"+androidid+"')");
webactdetail.evaluatejavascript(script, new valuecallback<string>() {

@override
public void onreceivevalue(string value) {
log.d(tag, "onreceivevalue value=" + value);

if(value!=null){
flag_get_deviceid=true;
}
}});
}
}

5.android手机版本问题,现在h5界面实现多样化,导致很多h5界面在低版本的机型上无法展示或者样式错乱

解决办法:一种是重新设计低版本的h5界面,另一种设置项目最低版本

补充知识:webview-使用webview依次访问url列表

有时候,我们需要使用webview依次访问url列表,来刷新网页;

1.1 webview创建

webview = (webview) findviewbyid(r.id.webview);

1.2 webview设置参数

  // 设置缓存
  webview.getsettings().setcachemode(websettings.load_cache_else_network);
  // 不设置缓存
  // webview.getsettings().setcachemode(websettings.load_no_cache);
  // 清理缓存
  webview.clearcache(true);
  // 清理历史记录
  webview.clearhistory();
  // 清理cookies
  cookiesyncmanager.createinstance(this);
  cookiesyncmanager.getinstance().startsync();
  cookiemanager.getinstance().removesessioncookie();
  // 设置可以支持缩放
  webview.getsettings().setsupportzoom(true);
  // 设置出现缩放工具
  webview.getsettings().setbuiltinzoomcontrols(true);
  webview.getsettings().setjavascriptenabled(true);

1.3 获取url列表

int index = 0;
 
string [] strlist = new string[]{"https://www.jb51.net",
"https://www.jd.com","https://www.csdn.net",https://www.baidu.com};

1.4 webview设置webviewclient

// 直接创建webviewclient
  webview.setwebviewclient(new webviewclient() {
   @override
   public void onpagefinished(webview view, string url) {
    super.onpagefinished(view, url);
    index++;
    if(index>artstr.length){
 
    }else {
     webview.clearcache(true);
     webview.clearview();
     log.i("===onpagefinished====", index + "=======");
     refreshwebpage(index);
    }
   }
  });

1.5 webview加载url

 public void refreshwebpage(int index) {
  string csdnstr = urlstr + artstr[index];
 
  // 直接调用url
  webview.loadurl(csdnstr);
 }

以上这篇解决webview通过url加载h5界面出现空白的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。