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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

devilyouwei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值