WebView打印前端Console日志

QuibblerQuibbler 2024-06-16 约 4 分钟 2236 次阅读

WebView打印前端Console日志

安卓开发中WebView是非常常用的控件,用来加载网页,涉及前端和客户端交互开发的时候需要查看网页打印的日志,这时候可以通过重写WebChromeClient类中的onConsoleMessage()方法打印网页中的Console日志:

class CustomChromeClient : WebChromeClient() {
    
        companion object {
            const val TAG = "consoleCustomChromeClient"
        }
        
        /*android 低版本 已废弃*/
        override fun onConsoleMessage(message: String?, lineNumber: Int, sourceID: String?) {
            Log.d(TAG, "$message($sourceID:$lineNumber)")
            super.onConsoleMessage(message, lineNumber, sourceID)
        }
        
        override fun onConsoleMessage(consoleMessage: ConsoleMessage?): Boolean {
            Log.d(
                TAG,
                "[" + consoleMessage?.messageLevel() + "] " + consoleMessage?.message() 
                + "(" + consoleMessage?.sourceId() + ":" + consoleMessage?.lineNumber() + ")"
            )
            return super.onConsoleMessage(consoleMessage)
        }
        
    }


但有时候可能会有些厂商的ROM不显示Console日志,可以通过Webview与原生的交互来实现。首先定义一个类和方法,需要用@JavascriptInterface注解方法。

class Console {
    
        @android.webkit.JavascriptInterface
        fun log(tag: String, msg: String) {
            Log.d(tag, msg)
        }
        
    }

使用WebView的addJavascriptInterface(@NonNull Object object, @NonNull String name)的方法进行对象映射:

webview.addJavascriptInterface(Console(), "console")

前端在开发的时候通过javascript对象映射,调用原生的方法以打印原生日志。

<script>
     function callAndroid(){
    // 由于对象映射,所以调用console对象等于调用Android映射的对象
      console.log("js调用了android中的log方法");
     }
   </script>

相关推荐

精选
ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager
Android

ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager

ViewPager1、ViewPagerandroidx.viewpager.widget.ViewPager,Android中使用非常广泛的控件,可以说是APP必备:首次打开引导页、页面Banner广告等。常用方法:setAdapter() 设置适配器setOffscreenPageLimit() 设置缓存的页面个数,默认是 1setCurrentItem() 跳转到特定的页面setOnPage

1.1k
获取Android内置WebView内核版本
Android

获取Android内置WebView内核版本

获取Android内置WebView内核版本竟然能遇到这样奇葩的事情,网页用的技术过于新颖,以至于只支持高版本Chromium内核的,低版本安卓系统中内置的内核版本较低,无法加载前端页面。1、设置查看在系统设置里 > 应用 > 应用管理 > 显示系统应用,查看WebView组件:2、页面查看通过WebView发起的网络请求,都会带上浏览器的UA,通常页面都可以通过UA判断浏览器的内核版本。这里有两

1.1w
Android 14适配总结
Android

Android 14适配总结

Android 14适配总结毕业工作至今已经适配了三个Android大版本,从Android 11到Android 12、再到Android 13。2023年,Google即将推出的Android 14,上半年已经开始第一批适配。现在,第四个Android版本已经适配完,总结记录一下。1、Android 14计划Google一般会在2月份对外发布预告,同时放出开发者预览版。“拉通”各大平台、厂商以

1.1w