WebView.Evaluate Javascript не всегда вызывает OnReceiveValue - PullRequest
0 голосов
/ 04 августа 2020

Я впервые работаю с Xamarin и столкнулся с этой проблемой:

OnReveiveValue моего класса JavascriptResult не всегда вызывается. Не знаю почему, но в большинстве случаев это не работает.

Вот мой код:

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);
}

1 Ответ

0 голосов
/ 04 августа 2020

Попробуйте настроить WebViewClient, затем вызовите webView.EvaluateJavascript в методе OnPageFinished.

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);
        }
    }

 
...