Hey guys, Android JellyBeans introduces JavascriptInterface annotation, I don't see it in Xamarin.Android. How to do the same in Xamarin.Android?:
class JsObject {
@JavascriptInterface
public String toString() {
return "injectedObject";
}
}
webView.addJavascriptInterface(new JsObject(), "injectedObject");
webView.loadData("", "text/html", null);
webView.loadUrl("javascript:alert(injectedObject.toString())");
public class WebViewActivity {
protected override void OnCreate (Bundle savedInstanceState) { var _RL = new RelativeLayout (Activity); RelativeLayout.LayoutParams _params = new RelativeLayout.LayoutParams (RelativeLayout.LayoutParams.FillParent, RelativeLayout.LayoutParams.FillParent); WebView _WV = new WebView (Activity); _WV.Id = 0X10000; _WV.LayoutParameters = _params; _WV.Settings.JavaScriptEnabled = true; _WV.AddJavascriptInterface (new JsObject (Activity), "JsObject"); _RL.AddView (_WV); _WV.LoadData ("", "text/html", null); //Must !! Load anything before target url _WV.LoadUrl (YourUrl); _WV.LoadUrl ("javascript:document.write(JsObject.GetString())"); }
}
public class JsObject : Java.Lang.Object {
Context context; public JsObject (Context context) { this.context = context; } public JsObject (IntPtr handle, JniHandleOwnership transfer) : base (handle, transfer) { } [Export ("GetString")] [JavascriptInterface] public string GetString () { return "Ooooops!!"; }
}
It's work for API Level 17 & 18
Answers
Use
[JavascriptInterface]
.I need yet to import Mono.Android.Export.dll? Thanks a lot.
I did some JavascriptInterfacing a while back, where I had to make a dummy .java file with the methods and signatures needed for the interfaces and used JNI to make a wrapper for C#. You can look in https://github.com/Cheesebaron/MonoDroid.WAToolkit/tree/master/MonoDroid.WAToolkit.Library/Login for a sample.
public class WebViewActivity {
}
public class JsObject : Java.Lang.Object {
}
It's work for API Level 17 & 18
Thanks a lot, guys


