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

Jak*_*n86 7 c# android xamarin.ios android-webview xamarin.android

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

例如

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

if(elementValue != "")
{
   DoSomething();
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以提供一个如何为Xamarin做这个的例子.Android/Monodroid Android kitkat及以上使用Evaluatejavascript()?具体如何同步使用/设置IValueCallback .

Aar*_* He 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.
    }
}
Run Code Online (Sandbox Code Playgroud)


ksa*_*asq 6

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
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可能会说出类似的话

web_view.EvaluateJavaScript("function() { alert('hello world'); return 42; }()",
        new JavaScriptResult());
Run Code Online (Sandbox Code Playgroud)