• 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

  • 相关阅读:
    Murano Weekly Meeting 2016.05.24
    Murano Weekly Meeting 2016.05.17
    Murano Weekly Meeting 2016.05.10
    python3.4 x86_64-linux-gnu-gcc Error
    初学makefile
    解决Spring JdbcTemplate调用queryForObject()方法结果集为空时报异常
    svn命令行使用
    jquery选中checkbox
    jstl core and jstl fn
    linux上的shutdown命令
  • 原文地址:https://www.cnblogs.com/devilyouwei/p/12960400.html
Copyright © 2020-2023  润新知