2012-02-22 73 views
2

我正在寻找如何使用webview从javascript调用monodroid方法(C#)的示例。来自javascript的示例调用monodroid方法示例

喜欢的东西:

的javascript:

<a href="#" onclick="window.android.callAndroid('Hello from Browser')"> 
    Call Android from JavaScript</a> 

C#

public class LocalBrowser extends Activity { 
... 
    private class MyClass { 
     public void callAndroid(final String arg) { 
       textView.setText(arg); 
     } 
    } 
    } 

感谢

回答

2

这是我用来最终解决这对我的例子。迟到总比不到好。

密切关注该函数的装饰,并确保在您的引用中包含Mono.Android.Export。

https://github.com/xamarin/monodroid-samples/blob/master/WebViewJavaScriptInterface/WebViewJavaScriptInterface/JavaScriptInterfaceActivity.cs

using System; 

using Android.App; 
using Android.Content; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 
using Android.OS; 

using Android.Webkit; 
using Java.Interop; 

namespace WebViewJavaScriptInterface 
{ 
[Activity (Label = "Mono WebView ScriptInterface", MainLauncher = true)] 
public class JavaScriptInterfaceActivity : Activity 
{ 
    const string html = @" 
<html> 
<body> 
<p>This is a paragraph.</p> 
<button type=""button"" onClick=""Foo.bar('test message')"">Click Me!</button> 
</body> 
</html>"; 

    protected override void OnCreate (Bundle bundle) 
    { 
     base.OnCreate (bundle); 

     // Set our view from the "main" layout resource 
     SetContentView (Resource.Layout.Main); 

     WebView view = FindViewById<WebView> (Resource.Id.web); 
     view.Settings.JavaScriptEnabled = true; 
     view.SetWebChromeClient (new WebChromeClient()); 
     view.AddJavascriptInterface (new Foo (this), "Foo"); 
     view.LoadData (html, "text/html", null); 
    } 
} 

class Foo : Java.Lang.Object 
{ 
    public Foo (Context context) 
    { 
     this.context = context; 
    } 

    public Foo (IntPtr handle, JniHandleOwnership transfer) 
     : base (handle, transfer) 
    { 
    } 

    Context context; 

    [Export ("bar")] 
    // to become consistent with Java/JS interop convention, the argument cannot be System.String. 
    public void Bar (Java.Lang.String message) 
    { 
     Console.WriteLine ("Foo.Bar invoked!"); 
     Toast.MakeText (context, "This is a Toast from C#! " + message, ToastLength.Short).Show(); 
    } 
} 

}