Android Webview评估Javascript返回null

问题描述 投票:0回答:1

我正在尝试从网络视图获取用户名。它返回空对象。

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 android html kotlin webview
1个回答
0
投票
  • 您面临的问题是因为 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")
             }
         )
      }
    }
    
© www.soinside.com 2019 - 2024. All rights reserved.