对于 Xamarin.iOS / Monotouch ,在评估 javascript 时检索字符串很简单。
e.g。
string elementValue = browser.EvaluateJavascript("document.getElementById('Id').value");
if(elementValue != "")
{
DoSomething();
}
有人可以提供一个如何为Xamarin执行此操作的示例。 Android / Monodroid Android kitkat及以上使用Evaluatejavascript()? 具体如何使用/设置IValueCallback 同步。
答案 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());