android 中使用webView的坑(个人整理,非网上Copy别人的,只是总结而已)

安卓使用webView加载网页,遇坑总结:

1 、 先说点大家都知道的,要使用webView加载网页,让网页在自己的webView中显示,而不是打开其他浏览器的话,就要设置webView的setWebClient,直接new 对象就可以了,完全可以在自己的webView中打开了,不过大部分网页都会支持js,所以一般还要设置webView,像下面的代码就可以在自己的webView中打开网页,

PS:我看到过很多人乱说各种各样的情况的,有说在shouldOverrideUrlLoading 方法中返回true的,我也是无语,所以说这点来让大家不要被迷惑,相信你自己测试下就知道了。

2、百度下webView闪的情况,肯定是一大把,因为我看到的闪可能跟别人的不一样吧!反正我百度到的闪的问题没有一个能解决我的问题的,大部分说是硬件加速搞得,但我也没遇到过,我的webView闪的时候都能看到css代码,看图就知道了



第一张是闪的情况,第二张是真正显示的样子,这就是我说的webView闪的情况,肯定不是因为硬件加速造成的,后面经过我不懈努力测试,终于知道了尼玛webView还是尽量少设置Visibility == Gone 的情况,因为你假如说先设置webView的visibility == GONE的话,等网页加载完成再显示就会出现我的这种情况,这可能是安卓的问题。

3、这是最大的坑了。 因为工作需要把别人的网页放在webView里面显示,然后可能别人的网页有些地方是你想要的,那就需要来隐藏网页(别人写的)里面的内容了,说到这里,你肯定想到了两种方法来解决这个问题,PS:不能说不解决吧,需求奇葩没办法。

第一,通过安卓来调用js来隐藏网页的某个标签或者控件

第二,直接通过HTTP请求获取网页的具体内容,然后再来替换或者删掉不需要的内容

现在,我们来一一说下这两种办法的缺点,以及真正解决问题。

先说第二种最大的问题就是通过HTTP请求来获取网页内容修改之后,又要重新调用webView的loadData方法来加载网页,问题是网页的cookie怎么办?登录,注册一些操作都不能做了,反正我是不知道怎么互相设置cookie的,会的大神教教我。

最后,我肯定就是用第一种办法解决的了。首先安卓调用js,肯定都会的,直接在onPageFinished里面调用view.loadUrl("javascript:"+你的js代码);,没错就是这样执行的,但你会看到你的网页显示出来之后,突然闪一下隐藏了你不要的控件,这样严重影响用户体验,所以只能想尽一切办法来解决这个问题了。

这种情况只能说用一个遮盖层挡住webView,等js执行完之后再去掉遮盖就可以了。注意:这里是用遮盖层挡住webView  不是设置webView的visibility == GONE,不然又回到了我第二个坑了。

然后看我下面的代码:

if(view.getProgress() >= 100 && displayed==false){
Log.i("KK", "progress ="+ view.getProgress());

view.loadUrl("javascript:var ary = document.getElementsByClassName(\"header\");var i; for(i = 0; i < ary.length;i++) {ary[i].style.display = \"none\";};");


new Thread(){
public void run() {
Log.i("KK", "隐藏加载");
try {
displayed=true;
Thread.sleep(500);
hideLoading();
} catch (InterruptedException e) {

e.printStackTrace();
}
Log.i("KK", "隐藏加载完成");

};}.start();

Log.i("KK", "progress隐藏加载完成");
}

这段代码是在onPageFinished里面执行的,解释下:因为你不知道webView什么时候执行完js,所以你也不知道该在什么时候隐藏遮盖层,所以我的方法是在webView执行js的时候,另起一个线程等待500毫秒然后通知主线程隐藏遮盖,根据测试线程等待500毫秒到1秒之间的话最合适,这个时间刚好js执行完,这样是最完美的,

最后是用hideLoading()方法通知主线程隐藏遮盖

public void hideLoading(){
runOnUiThread(new Runnable() {

@Override
public void run() {
rlLoading.setVisibility(View.GONE);
displayed = false;
}
});
}

OK,webView中遇到的坑就说完了,有什么问题欢迎交流,欢迎指点提问!PS:很多常见的问题我就不在这里说了,大家不要以为没有哦!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ling9400

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值