美文网首页
WebView篇——页面返回onReceivedTitle不回调

WebView篇——页面返回onReceivedTitle不回调

作者: lvTravler | 来源:发表于2019-08-11 12:06 被阅读0次

Android使用Native和Web混合开发时,一般Native提供WebView和TitleBar(eg:ToolBar)作为壳,虽然大部分逻辑由网页自行完成,但是一些必要的逻辑还是需要Native来完成,例如按回退键、标题的显示、弹框的Native替换(当然标题栏由Web完成的除外)需要Native完成,所以就需要Native获取Web页面的基本信息来完成,例如:

页面回退:

    /**
     * 物理返回键和标题栏返回键监听事件
     */
    override fun onBackClick(view: View?) {
        if (mWebActWebContainer.canGoBack()) {
            mWebActWebContainer.goBack()
        } else {
            super.onBackPressed();
        }
    }

标题显示:

    override fun onReceivedTitle(view: WebView, title: String) {
        //标题显示
    }

问题:

通常将标题显示逻辑放在onReceivedTitle()中,但是这儿有一个问题,就是有一些机型在网页回退的时候不回调onReceivedTitle()导致标题显示失败。

解决方案

所以为了适配就需要考虑解决方案,既然回退onReceivedTitle()不回调,那么页面加载完毕onPageFinished()时肯定会回调,所以可以将标题显示逻辑显示在onPageFinished(),那么就要将每一个页面的标题保存下来然后在onPageFinished()中显示,另外需要说明的是onReceivedTitle()是在onPageFinished()之前回调,所以我们可以在初次进入时在onReceivedTitle获取页面title并保存到一个Map中,然后在onPageFinished()获取并显示,代码如下:

    override fun onReceivedTitle(view: WebView, title: String) {
       //保存数据,url作为Key
        titleMap.put(view.url, title)
    }
    override fun onPageFinished(view: WebView, url: String) {
       val title = titleMap.get(mWebActWebContainer.url)
        //TODO 显示
    }

这样就可解决部分机型页面回退导致的标题显示失败的问题

相关文章

网友评论

      本文标题:WebView篇——页面返回onReceivedTitle不回调

      本文链接:https://www.haomeiwen.com/subject/satqjctx.html