Added error handling to onConsoleMessage.

This commit is contained in:
Koen J
2026-03-20 11:35:16 +01:00
parent 8982ea2289
commit 897ba8a560
@@ -183,6 +183,7 @@ class PackageBrowser: V8Package {
}
_browser?.webChromeClient = object : WebChromeClient() {
override fun onConsoleMessage(consoleMessage: ConsoleMessage?): Boolean {
try {
val raw = consoleMessage?.message().orEmpty()
val normalized = raw.trim().let { s ->
@@ -197,18 +198,26 @@ class PackageBrowser: V8Package {
}
if (consoleMessage?.messageLevel() == ConsoleMessage.MessageLevel.ERROR) {
val emsg = "Browser Error:${consoleMessage.message()} [${consoleMessage.lineNumber()}]"
val emsg =
"Browser Error:${consoleMessage.message()} [${consoleMessage.lineNumber()}]"
Logger.e("PackageBrowser", emsg)
if (_plugin.config is SourcePluginConfig && _plugin.config.id == StateDeveloper.DEV_ID)
StateDeveloper.instance.logDevException(StateDeveloper.instance.currentDevID ?: "", emsg)
StateDeveloper.instance.logDevException(
StateDeveloper.instance.currentDevID ?: "", emsg
)
} else {
val imsg = "Browser Log:${consoleMessage?.message()}"
Logger.i("PackageBrowser", imsg)
if (_plugin.config is SourcePluginConfig && _plugin.config.id == StateDeveloper.DEV_ID)
StateDeveloper.instance.logDevInfo(StateDeveloper.instance.currentDevID ?: "", imsg)
StateDeveloper.instance.logDevInfo(
StateDeveloper.instance.currentDevID ?: "", imsg
)
}
return super.onConsoleMessage(consoleMessage)
} catch (e: Throwable) {
Logger.e(TAG, "Failed to handle onConsoleMessage", e)
}
}
}
}
@@ -507,7 +516,13 @@ class PackageBrowser: V8Package {
val res = parsed.result
val cb = synchronized(_callbacks) { _callbacks.remove(id) } ?: return true
StateApp.instance.scopeOrNull?.launch(Dispatchers.IO) { cb.invoke(res) }
StateApp.instance.scopeOrNull?.launch(Dispatchers.IO) {
try {
cb.invoke(res)
} catch (e: Throwable) {
Logger.e(TAG, "Failed to invoke callback asynchronously", e)
}
}
return true
}
"log" -> {
@@ -524,6 +539,7 @@ class PackageBrowser: V8Package {
private companion object {
private const val CONSOLE_BRIDGE_PREFIX = "__GJ__:"
private const val TAG = "PackageBrowser"
private fun String.quoteForJs(): String {
val s = this