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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章