我正在使用MonoDroid,并且希望从WebView中调用C#代码。
我正在这样做(C#):
protected override void OnCreate(Bundle bundle)
{
[...]
LinearLayout layout = FindViewById<LinearLayout>(Resource.Id.MyLayout);
var webView = new WebView(this);
webView.SetWebChromeClient(new WebChromeClient());
webView.Settings.JavaScriptEnabled = true;
webView.AddJavascriptInterface(new JSAccesibleObject(), "cSharpObject");
webView.LoadUrl("file:///android_asset/test.html");
layout.AddView(webView);
}
public class JSAccesibleObject : Java.Lang.Object
{
public void method1()
{
}
}
在Javascript中,定义了cSharpObject,但没有属性。
alert(cSharpObject); //mynamespace.Activity1_JSAccesibleObjec@f4438fe8
for (var prop in cSharpObject)
alert(prop); //this never gets called
alert(cSharpObject.method1) //undefined
alert(cSharpObject.method1()) //fails
我是在做错什么,还是在MonoDroid中不起作用?
最佳答案
A)在您的方法上添加[导出]属性。
B)在xamarian网站上:
http://docs.xamarin.com/android/recipes/Controls/WebView/Call_C%23_from_JavaScript
C)在.java文件中写入您的JavaScriptInterface类型,包括.java
使用AndroidJavaSource Build操作在项目中添加文件,并在Activity1.OnCreate()中执行以下操作:
IntPtr JavaScriptInterface_Class = JNIEnv.FindClass ("the/package/for/JavaScriptInterface");
// TODO: Update "the/package/for" as appropriate for your type.
IntPtr JavaScriptInterface_ctor = JNIEnv.GetMethodID (JavaScriptInterface_Class, "<init>", "()V");
IntPtr instance = JNIEnv.NewObject (JavaScriptInterface_Class, JavaScriptInterface_ctor);
appView.AddJavascriptInterface (new Java.Lang.Object (instance), "Android");
关于android - 将WebView.AddJavascriptInterface与MonoDroid结合使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6505878/