如何在Xamarin.Android/Monodroid中使用Android KitKat EvaluateJavascript并检索结果?

时间:2014-03-01 12:55:54

标签: c# android xamarin.ios android-webview xamarin.android

对于 Xamarin.iOS / Monotouch ,在评估 javascript 时检索字符串很简单。

e.g。

string elementValue = browser.EvaluateJavascript("document.getElementById('Id').value");

if(elementValue != "")
{
   DoSomething();
}

有人可以提供一个如何为Xamarin执行此操作的示例。 Android / Monodroid Android kitkat及以上使用Evaluatejavascript()? 具体如何使用/设置IValueCallback 同步

2 个答案:

答案 0 :(得分:10)

@ ksasq的答案基本上是正确的,但需要一些小的改动。

首先,确保安装了Xamarin Android 4.12,为KitKat添加了绑定。

然后,由于WebView.evaluateJavascript尚未绑定在C#flavor中,因此您必须创建一个类实现IValueCallback。棘手的部分是类必须从Java.Lang.Object继承。

该课程的一个例子如下:

private class MyClass : Java.Lang.Object, IValueCallback
{
    public void OnReceiveValue(Java.Lang.Object value)
    {
        //Here goes your implementation.
    }
}

答案 1 :(得分:5)

Android的WebView异步执行JavaScript并稍后在ValueCallback中传递执行结果。

我对Xamarin并不熟悉,但如果您可以分享一些Android C#代码,可能会有所帮助。

从Java的角度来看,我的经验在哪里:

实质上,您需要实例化一个实现onReceiveValue函数的ValueCallback对象。当您评估的javascript完成执行时,您声明的函数将被执行,将该评估的结果作为一个JSON字符串的参数传递。然后,您应该能够从该JSON中检索结果。

希望这有帮助!

更新:将一些可能有用的C#拼凑在一起。警告:在此之前我从未写过一行c#。但希望如果它不太正确会让你走上正确的道路: - )

class JavaScriptResult : public IValueCallback {
    public void OnReceiveValue(Java.Lang.Object result) {
        Java.Lang.String json = (Java.Lang.String) result;
        // |json| is a string of JSON containing the result of your evaluation
    }
}

然后你可能会说出类似

的内容
web_view.EvaluateJavaScript("function() { alert('hello world'); return 42; }()",
        new JavaScriptResult());