Использование webView.AddJavascriptInterface с MonoDroid - PullRequest
1 голос
/ 28 июня 2011

Я использую MonoDroid и хотел бы сделать код C # доступным для вызова из моего WebView.

Я делаю это (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?

Ответы [ 2 ]

1 голос
/ 28 августа 2012

A) Добавьте атрибут [Export] в ваш метод.

B) На веб-сайте xamarian: http://docs.xamarin.com/android/recipes/Controls/WebView/Call_C%23_from_JavaScript

C) напишите свой тип JavaScriptInterface в файле .java, включите.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");
0 голосов
/ 28 июня 2011

Возможно, вы захотите взглянуть на код моста Java, который генерируется для вашего класса JSAccesibleObject. Посмотрите в \ obj \ Debug \ android \ src и посмотрите, какие там методы / свойства. Это должны быть методы, которые будут вызываться из Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...