当前位置 : 主页 > 网络推广 > seo >

记一次WebView使用异常,点击搜索引擎页内的超链接,无法跳转到相应的页面

来源:互联网 收集:自由互联 发布时间:2021-06-16
事情是这样的,有业务需求需要使用yandex(www.yandex.ru)这个搜索引擎搜索内容,在自己的activity里面创建了一个webview,webview load这个搜索引擎搜索关键字(随便一个关键字都可以),大

事情是这样的,有业务需求需要使用yandex(www.yandex.ru)这个搜索引擎搜索内容,在自己的activity里面创建了一个webview,webview load这个搜索引擎搜索关键字(随便一个关键字都可以),大概界面如下:



随便点击其中的链接项,正常情况下希望能load出具体的网页,并且正常情况下,如果我们复写了WebViewClient那么必然会调用shouldOverrideUrlLoading方法。然而事实上我怎么点击都没用,没反应,但是又不像anr,因为我还可以上下滑动,加载更多的搜索项,以及点击页面的其他按钮,并且shouldOverrideUrlLoading也没有回调。

起初是怀疑是不是这个搜索引擎有问题,于是换成了百度搜索,结果没什么问题,很正常的进行跳转。而且,在其他浏览器里面使用yandex搜索,也没什么问题,会正常的跳转。也就是说浏览器和搜索引擎都没什么问题。那问题究竟出现在哪里呢?

我们来看两种动图,分别使用yandex和百度搜索关键字,都是在chrome浏览器里面进行的:



注意看浏览器点击链接后的的tab的反应,在yandex搜索中点击链接后,tab(右上角)变成了2,而百度搜索点击连接后tab还是原来的1。说明浏览器在两个搜索结果的跳转上是有差别的,前者相当于是新建了一个webview来加载新的链接,而后者则是在原有的webview上加载,并且会回调shouldOverrideUrlLoading方法。

搜索之前代码的提交记录,有这么一个注释引起了我的注意:


原来之前早就有人踩过了这个坑,可惜后来合并分支又把之前注释掉的代码还原了。 o(╯□╰)o

那么这个setSupportMultipleWindows方法到底是什么作用呢?从字面意思来看就是支持多窗口(也就是支持多个webview),具体可移步这里学习下:浅谈WebView在新窗口浏览网页(setSupportMultipleWindows()与onCreateWindow()关系)

大体上来说就是,默认情况下webSettings.setSupportMultipleWindows(false)是被设置为false的(也就是我们什么都不做的情况下),一旦我们设置为true,并且网页的链接里面tartget的属性为_blank,那么当我们点击链接的时候,就会在另外一个窗口(webview)中来加载网页。之所以我的webview不能加载yandex的链接,就是因为我设置了setSupportMultipleWindows(true)支持多窗口模式,yandex的链接中包含_blank属性(可以看红圈里的:


),而实际上我就只有一个webview(业务处理不像浏览器那样可以支持多个窗口,只希望所有的网页加载都在一个webview中),并没有相应的处理多个webview的情况。所以就有点了链接之后无响应的错觉。

所以想要解决这个问题,非常简单的就是注释掉那个支持多窗口的设置,让所有的网页都在一个webview里面加载。奏是这么简单了~o(╯□╰)o


最后,附上一份ubuntu上录制视频并转换为gif的方法:

基本上是参考这篇文章:Ubuntu下录制 和 制作 Gif 图片

首先,得装3个软件,我使用AS录制手机操作视频,所以免了第一步,

1.Install softwares

(1)sudo apt-get install kazam

(2)sudo apt-get install mplayer

(3)sudo apt-get install imagemagick

然后使用如下命令转换成gif:

2.Convert to Gif

(1)Generate JPEG pictures

~/Videos$ mplayer -ao null Kazam_screencast_00000.mp4 -vo jpeg:outdir=./tabs

(2)Generate Gif

~/Videos$ convert ./tabs/*.jpg -resize 63% progress.gif

可以把百分值调低点
网友评论