onConsoleMessage of WebChromeClient not capturing nested objects

112 Views Asked by At

I have a WebView with WebChromeClient set to capture Console logs

            this.setWebChromeClient(object : WebChromeClient() {
            override fun onConsoleMessage(consoleMessage: ConsoleMessage): Boolean {
                Log.d("WebView Console Logs", consoleMessage.message())
                return true
            }
        })

The Console logs have nested Objects like this

sendCKSession {isICDP: false, ckSession: '46__53__AZ5uHA2kBwzzONCyVNuHNutNbV3SLzNYjfC+s30sru…SVm9uSERQT2RnZEZzd2VTS1djTlZTVGYvZjBnZDlWTmU5In0=', permissions: Array(1), appInfo: {…}, pcsDeleted: false, …}appInfo: {AppId: '1261755406', ContainerId: 'iCloud.Wasiq.Migraine', AdditionalSalt: 'b440efde65bb8c1f45464598470f4cc73977f2c10d6c40587588ec9f1c1c56f0', LogoURL: 'https://is1-ssl.mzstatic.com/image/thumb/Purple114…07emarketing-0-0-0-7-0-0-85-220.png/512x512bb.png', AppDiscoverable: 'false', …}ckSession: "46__53__AZ5uHA2kBwzzONCyVNuHNutNbV3SLzNYjfC+s30srufbRfzTP3KbOAhf0EizHZUYalHLbawTle6UEIzXr5rQIwS/m3Hu4edp4GKxArcPdSkUpcuUJ4h3fEk0d5nY3emz5iAM6Oe2JMH6TP2z0RCBI1yffQjomvyAXhrKAgHVpdonLM6xv9Xu+qI+YLdyS30Q3HC/gutjYUF/MalaMmvi2Cf9/rV9b92fGcy6usVSuS2/XHdVmgO+fc1CYN4f5rvAQNOrYuZhCokP5KaNDEvdmjrd6zTNmbCh34Lgga82D2SM+Lla1RlHOZQFUDrQJL2GO4u/mEI5oGjnGnR5nNQ178PqZ2eC+odYshiFYaQJYB4AFeAitXeuZpgiyzrmjZdLaAMSfYJG23T3G+YBHUKEmmj1NZWOZ7pQs2b9q5cHtKkl1Q==__eyJYLUFQUExFLVdFQkFVVEgtUENTLUNsb3Vka2l0IjoiUVhCd2JEb3hPZ0c4N2g1d3FydGtVUnVVRG1TVUNVOUJaRmVOQmgxd1ZVTVc1WkhzcTlMYUtjanBOWVJoTFFyK05vL25lZXBsaE0ybk1SY2tjcjMvYksxWjlxQld2cy91IiwiWC1BUFBMRS1XRUJBVVRILVBDUy1TaGFyaW5nIjoiUVhCd2JEb3hPZ0crTktqSGNqbVoxVUFKZ2FCNHV0NytxdElrZGJDaGhleGs1WmV6UUJBWVR3bDEzME93aWxSVm9uSERQT2RnZEZzd2VTS1djTlZTVGYvZjBnZDlWTmU5In0="isICDP: falsepcsDeleted: falsepermissions: [{…}]status: 0[[Prototype]]: Object

I want to capture the ckSession object inside sendCKSession

However, on Logcat, I only see

sendCKSession [object Object]

How do I parse the object and fetch ckSession?

1

There are 1 best solutions below

3
Ivan Abakumov On

I think you need to convert this object to JSON and then pull data from it.

I changed your method. It receives an object ConsoleMessage, converts it to JSON . After that, I pull objects from it by keys(sendCKSession and ckSession).

override fun onConsoleMessage(consoleMessage: ConsoleMessage): Boolean {
            val messageString = consoleMessage.message()
            val jsonObject = JSONObject(messageString)
            if (jsonObject.has("sendCKSession")) {
                val sendCKSessionObject = jsonObject.getJSONObject("sendCKSession")
                val ckSession = sendCKSessionObject.getString("ckSession")
                Log.d("ckSession", ckSession)
            }
            return true
    }

In some situations, your JSON may be empty, in which case checks or try-catch can be added.