- Решение должно работать над API> 20 < /li>
Это решение не работает. Я предполагаю, что это работает только на нижних версиях API Android. Я тестирую на Android 8.0. < /li>
Я попытался использовать модернизацию, как только страница загружена, вместо получения HTML через WebViewClient. Но пользователь не вошел в систему в запросе модернизации. И тогда я делаю то же самое 2 раза. < /P>
@SuppressLint("JavascriptInterface")
private fun initializeWebView(url : String?) {
binding.webView.loadUrl(url)
binding.webView.settings.javaScriptEnabled = true
binding.webView.settings.useWideViewPort = true
binding.webView.requestFocus(View.FOCUS_DOWN)
binding.webView.addJavascriptInterface(MyJavaScriptInterface(context!!), "HtmlViewer");
binding.webView.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
return false
}
override fun onPageFinished(view: WebView?, url: String?) {
// super.onPageFinished(view, url)
//tried adding a sleep, but doesn't work:
Thread.sleep(6000)
//showHTML method is not being called:
binding.webView.loadUrl("javascript:window.HtmlViewer.showHTML" +
"(''+document.getElementsByTagName('html')[0].innerHTML+'');")
// Prints out: html: null
binding.webView.evaluateJavascript(
"javascript:window.HtmlViewer.showHTML" +
"(''+document.getElementsByTagName('html')[0].innerHTML+'');"
) { html ->
Log.d("HTML", html)
// code here
}
}
}
}
class MyJavaScriptInterface(val context: Context) {
fun showHTML(html: String) {
Log.d("",""+html)
AlertDialog.Builder(context).setTitle("HTML").setMessage(html)
.setPositiveButton(android.R.string.ok, null).setCancelable(false).create().show() }
}
Подробнее здесь: https://stackoverflow.com/questions/530 ... viewclient