c# - 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);
}
解决方案
尝试自定义一个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);
}
}
推荐阅读
- mongodb - 原因:java.lang.InterruptedException:在使用 JPA 和 Spring Data 的 Mongo 保存操作期间为 null
- deployment - 在 Vercel 中部署 Strapi
- node.js - 如何从头开始实现乐观锁?
- java - JUnit 无法在打包为 JAR 的 Spring Boot 应用程序中以编程方式发现测试
- search - Win 10 文件搜索 - 名称参数后的通配符
- php - PHP路由器和nginx配置
- apache-kafka - 识别并查找 Kafka 主题中的特定消息
- postgresql - 为什么 Time 和 Numeric 数据类型的查询结果很奇怪?
- sql-server - 在 T-SQL 中对多列的值求和并创建总值的新列的最有效方法是什么?
- office-js - Outlook 加载项在长时间同步操作时崩溃