【发布时间】:2023-12-24 06:46:01
【问题描述】:
我正在使用 Android WebView 获得一些“乐趣”。
我正在使用它来显示登录屏幕,然后在响应时拦截身份验证代码。应该很简单...
如果我只覆盖 shouldOverrideUrlLoading 但如果我覆盖(就像 Android Studio 自动完成),我的 WebView 加载和显示绝对正常:
override fun shouldInterceptRequest(
view: WebView?,
request: WebResourceRequest?
): WebResourceResponse {
return super.shouldInterceptRequest(view, request)
}
如果没有其他更改,它会在运行时立即崩溃并引发本机崩溃
A/铬:[致命:jni_android.cc(259)]
紧随其后
A/libc:致命信号 6 (SIGABRT),tid 16220 (TaskSchedulerFo) 中的代码 -6 (SI_TKILL),pid 16175 (eports.internal)
奇怪的是,如果我将响应设为空,WebView 将再次工作。但是,在 shouldInterceptRequest 方法中添加任何其他内容都会导致同样的错误。
所以这行得通:
override fun shouldInterceptRequest(
view: WebView?,
request: WebResourceRequest?
): WebResourceResponse? {
return super.shouldInterceptRequest(view, request)
}
但这会因上述崩溃而崩溃:
override fun shouldInterceptRequest(
view: WebView?,
request: WebResourceRequest?
): WebResourceResponse? {
val url = view?.url
return super.shouldInterceptRequest(view, request)
}
这似乎是一个非常奇怪的问题,对我来说为什么添加一个 val 分配会产生任何影响是没有意义的。
我一直在研究错误和建议是添加
webView.destroy()
在 onDestroy/onDestroyView 的活动/片段中,不幸的是,这没有帮助。
Device 和 Emulator 以及 Android sdk 22 和 28 上的行为相同。
以前有人见过这样的事情吗?我觉得我可能遗漏了一些明显的东西。
如果它对任何人有用,我也生成了 Breakpad Microdump,它太大了,无法在这个问题中发布。但请告诉我它或其中的一部分是否有助于诊断!
【问题讨论】:
-
这也发生在我身上。
-
希望我能说我知道发生了什么。就我而言,我只是在记录 url。如果我尝试记录 url
标签: android webview chromium intercept