首页 > 解决方案 > WebView.EvaluateJavascript 并不总是调用 OnReceiveValue

问题描述

我第一次使用 Xamarin 并遇到了这个问题:

我的类 JavascriptResult 的 OnReveiveValue 并不总是被调用。我不知道为什么,但大多数时候它不起作用。

这是我的代码:

public class JavascriptResult : Java.Lang.Object, Android.Webkit.IValueCallback
{
    public string Result;
    public void OnReceiveValue(Java.Lang.Object result)
    {
        string json = ((Java.Lang.String)result).ToString();
        Result = json;
    }
}
public void GetHtmlContent()
{
    string url = "https://www.google.de/";

    WebView webView = FindViewById<WebView>(Resource.Id.webView1);
    webView.SetWebChromeClient(new WebChromeClient());
    webView.Settings.JavaScriptCanOpenWindowsAutomatically = true;
    webView.Settings.JavaScriptEnabled = true;
    webView.LoadUrl(url);

    JavascriptResult javaScriptResult = new JavascriptResult();
            
    webView.EvaluateJavascript("document.documentElement.innerHTML;", javaScriptResult);
}

标签: c#xamarin.android

解决方案


尝试自定义一个WebViewClient,然后调用webView.EvaluateJavascriptOnPageFinished方法。

public void GetHtmlContent()
  {
      string url = "https://www.google.de/";
      WebView webView = FindViewById<WebView>(Resource.Id.webView1);
      webView.SetWebChromeClient(new WebChromeClient());
      webView.SetWebViewClient(new MyClient());
      webView.Settings.JavaScriptCanOpenWindowsAutomatically = true;
      webView.Settings.JavaScriptEnabled = true;
      webView.LoadUrl(url);

  }
class MyClient : WebViewClient
    {
        public override void OnPageFinished(WebView view, string url)
        {
            base.OnPageFinished(view, url);
            JavascriptResult javaScriptResult = new JavascriptResult();
            view.EvaluateJavascript("document.documentElement.innerHTML;", javaScriptResult);
        }
    }

 

推荐阅读