JsBridge踩坑之WebViewJavascriptBridge is undefined,找不到Bridge对象

最近在给单位搞一个android的hybrid开发外壳,使用kotlin语言。由于之前一直都只做hybrid的前端部分,基本只是调用原生壳里的android方法,Android方面开发经验不足,遇到一个webview中找不到bridge对象的问题,下面描述以下问题:

在Hybrid开发中,一般使用第三方的bridge通信库,这种库可以使原生和前端webview进行信息传递和方法互调,我采用的JsBridge这个库,https://github.com/lzyzsd/JsBridge

由于之前做过hybrid的前端部分开发,知道在使用这个库之后,原生端会在webview的window对象中插入一个WebViewJavascriptBridge对象,这个对象就是可以用call和register两大方法来和原生通信的关键对象。没有他就无法和原生通信!

要使用这个WebViewJavascriptBridge必须在原生端,android这边用BridgeWebView替代原来的WebView对象,layout里面的xml也需要用这个对象对应的控件才行。

然而奇怪的事情发生了,我把所有的WebView对象换成了BridgeWebView对象之后,一切都运行正常,但是前端(vue)在调用window.WebViewJavascriptBridge却提示这个对象undefined。这说明原生端还是没有把这个对象插入到webview,用的还是原来android自带的webview,这就是个简单的浏览器呀。

我辛苦找了一整天,排除了手机系统问题,模拟器问题,xml布局问题,调用逻辑问题,最终确定了bug位置!

webViewClient也要设置成BridgeWebViewClient对象的overide!

万万没想到,这真的是太坑了,下面是正确代码(kotlin):

 mWebView.webViewClient = object : BridgeWebViewClient(mWebView) {
                override fun onPageFinished(view: WebView?, url: String?) {
                    if (splashView != null) Animation().fadeOut(splashView as View, 1000)
                    super.onPageFinished(view, url)
                }

                override fun onReceivedError(
                    view: WebView?,
                    request: WebResourceRequest?,
                    error: WebResourceError?
                ) {
                    Log.i(tag, "onReceivedError")
                    view?.loadUrl("file:///android_asset/error.html")
                    super.onReceivedError(view, request, error)
                }

                override fun onReceivedHttpError(
                    view: WebView?,
                    request: WebResourceRequest?,
                    errorResponse: WebResourceResponse?
                ) {
                    Log.i(tag, "onReceivedHttpError")
                    view?.loadUrl("file:///android_asset/error.html")
                    super.onReceivedHttpError(view, request, errorResponse)
                }
            }

最终帮我我发现问题的源头的帖子是:
https://github.com/lzyzsd/JsBridge/issues/29

猜你喜欢

转载自www.cnblogs.com/devilyouwei/p/12960400.html
今日推荐