关于Android7.0系统使用webview遇到的一个问题(二级跳转后界面空白)

96
Panyz
0.1 2017.04.21 10:30* 字数 612

前言

欢迎关注我的github

webview在之前的项目开发中我还尚未真正使用过,也仅仅停留在自己写的demo。不过早就听闻过此控件的坑不少,这次就被领教了。

因为有个项目需要用到webview,所以我还是先看看别人大神们总结过的资料,看看什么地方可以运用到项目中。嗯,我就是看了这篇WebView·开车指南之后,就开始上路了。

一路上并未遇到什么障碍,用公司的测试机也未出现什么异常的地方,直到把项目运行在自己的手机上时,我掉进坑里!!!

什么坑呢?在Android7.0系统中,第一次webview加载时,显示完全没有问题的,当我点击webview里的内容进行二级跳转的时候,就会显示一片空白,什么都没有!!

在google、百度一轮之后,发现遇到这样的问题的人很少,资料也基本上没有。这时候就只能靠自己了。

首先,先看看为什么会出现空白页面,所以我在onPageFinished()的回调方法里,对url打了个log,输出的是about:blank。这是怎么回事呢?点击事件后连个url都不见了吗?

然后我把目光都放在了下图中的这个回调方法,因为可能就在loadUrl的时候出了什么问题了。

截图来自WebView·开车指南
            //是否在webview内加载页面
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                view.loadUrl(request.toString());
                return true;
            }

打Log一看,果然load的不是一个url,而是一个对象。于是我看看request这个对象下才看到我所要跳转的url。嗯,再看看这个request持有的方法就有个getUrl() 方法,调用之后就报错了,因为只能在5.0系统以上才能用,直觉告诉我,问题就是出现在这里了,最后,我在这个回调方法中稍微改动了下,如下:

截图
            //是否在webview内加载页面
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    view.loadUrl(request.getUrl().toString());
                } else {
                    view.loadUrl(request.toString());
                }
                return true;
            }

运行项目,ok了!

当然,这里面肯定有很多学问和为什么在里头,鉴于项目还在赶进度我就没有继续深究了,希望搞懂这个问题的朋友能告知下!

最后,小弟不才,还望多多指教!

Android开发系列
Web note ad 1