我正在尝试从网络视图获取用户名。它返回空对象。
webView.settings.javaScriptEnabled = true
webView.evaluateJavascript(
"(function() { return document.getElementsByClassName('lgn-loginname') })();",
ValueCallback<String> { s ->
// 's' contains the result of the JavaScript evaluation
Log.d("JavaScript Result", "Result: $s")
})
此外,它也是空的。
webView.evaluateJavascript(
"(function() { var elements = document.getElementsByClassName('lgn-loginname'); " +
"return elements.length > 0 ? elements[0].innerHTML })();",
ValueCallback<String> { s ->
// 's' contains the result of the JavaScript evaluation
Log.d("JavaScript Result", "Result: $s")
})
我尝试了很多事情,但总是失败。我做错了什么?
您面临的问题是因为 JavaScript 代码在网页加载完成之前就被执行了。因此,您尝试访问的元素尚不可用。
您需要等待页面完全加载后再执行 JavaScript 代码。您可以通过使用 WebViewClient 并重写其 onPageFinished 方法来完成此操作。这是你可以做到的
webView.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView, url: String) {
super.onPageFinished(view, url)
webView.evaluateJavascript(
"(function() { var elements =
document.getElementsByClassName('lgn-loginname'); " +
"return elements.length > 0 ? elements[0].innerHTML : null })();",
ValueCallback<String> { s ->
// 's' contains the result of the JavaScript evaluation
Log.d("JavaScript Result", "Result: $s")
}
)
}
}