Как получить сырой HTML-ответ от Android WebViewClient - PullRequest
0 голосов
/ 29 октября 2018
  • Решение должно работать на API> 20
  • Это решение не работает . Я предполагаю, что это работает только на более низких версиях Android API. Я тестирую на Android 8.0.
  • Я пытался использовать Retrofit, как только страница загружается, вместо получения html через WebViewClient. Но пользователь не вошел в запрос на модификацию. И я делаю один и тот же запрос 2 раза.

    @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" +
                        "('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');")
    
     // Prints out: html: null
                binding.webView.evaluateJavascript(
                        "javascript:window.HtmlViewer.showHTML" +
                                "('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');"
                ) { 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()  }
    }
    
...