Xamarin Android在Javascript和C之间的双向通信#
我正在使用Xamarin Android开发一个应用程序,它有一个显示网页的网络视图。我想实现Javascript从WebView到c#之间的双向通信。我可以用这个从Javascript调用C。然而,我找不到一种方法将数据从C#发送回Javascript。 在这种方法中是否有一种来回发送数据的方法。我原以为用Javascript编写回调就可以了,但如何从C#代码启动回调呢 现在,我的问题是如何从javascript接口类调用WebView。如前所述,我有一个Javascript接口类 名称空间扫描节点 { 公共类JSInterface:Java.Lang.Object { 语境; 网络视图Xamarin Android在Javascript和C之间的双向通信#,xamarin,xamarin.android,Xamarin,Xamarin.android,我正在使用Xamarin Android开发一个应用程序,它有一个显示网页的网络视图。我想实现Javascript从WebView到c#之间的双向通信。我可以用这个从Javascript调用C。然而,我找不到一种方法将数据从C#发送回Javascript。 在这种方法中是否有一种来回发送数据的方法。我原以为用Javascript编写回调就可以了,但如何从C#代码启动回调呢 现在,我的问题是如何从javascript接口类调用WebView。如前所述,我有一个Javascript接口类 名称空间扫
public JSInterface (Context context, WebView webView1)
{
this.context = context;
this.webView = webView1;
}
[Export]
[JavascriptInterface]
public void ShowToast()
{
Toast.MakeText (context, "Hello from C#", ToastLength.Short).Show ();
this.webView.LoadUrl ("javascript:callback('Hello from Android Native');");
}
}
}
代码在LoadUrl行.java.lang.Throwable处引发异常:在线程“thread-891”上调用了WebView方法。必须在同一线程上调用所有WebView方法。(预期的Looper-Looper(main,tid 1){42ce58a0}在null上调用,FYI main-Looper是Looper(main,tid 1){42ce58a0})
现在我正在努力从这个Java脚本接口类中引用WebView。是的。这是可能的。如果您的目标是KitKat或更高版本,您可以使用:
webView.EvaluateJavascript("enable();", null);
在本例中,enable();
是一个JS函数
如果您的目标是较低的API级别,则可以使用LoadUrl();
:
编辑:
它在LoadUrl
上抱怨的错误是因为它出于某种原因发生在非UI线程上
由于您已经将上下文
传递到JavascriptInterface类中,因此您可以简单地将showtoos
的内容包装到:
context.RunOnUiThread(() => {
// stuff here
});
只需将签名从
Context
更改为Activity
,它将帮助您重新整理UI线程。是的。这是可能的。如果您的目标是KitKat或更高版本,您可以使用:
webView.EvaluateJavascript("enable();", null);
在本例中,enable();
是一个JS函数
如果您的目标是较低的API级别,则可以使用LoadUrl();
:
编辑:
它在LoadUrl
上抱怨的错误是因为它出于某种原因发生在非UI线程上
由于您已经将上下文
传递到JavascriptInterface类中,因此您可以简单地将showtoos
的内容包装到:
context.RunOnUiThread(() => {
// stuff here
});
只需将签名从
Context
更改为Activity
,它就可以帮助您将您封送回UI线程。我的问题的可能重复的可能重复是谁从javascript接口类调用WebView。我有一个javascript接口类,如上所述,我不明白是什么“如何从javascript接口类调用WebView”是。你的意思是什么?Cheesebaron请参阅下面的详细信息。请编辑原始问题,而不是创建答案。我的问题是谁从javascript接口类调用WebView。我有一个javascript接口类,如前所述,我不明白是什么”如何从javascript接口类调用WebView“是。你是什么意思?Cheesebaron请参阅下面的详细信息。请编辑原始问题,而不是创建答案。