美文网首页
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