2016-09-22 29 views
1
でJavaScriptからC#の

を呼び出すと、それは私と一緒に働いていない見つけ、私はAPI19を使用して、私のコードは次のとおりです。私はここにきた間違いです<a href="https://developer.xamarin.com/api/type/Xamarin.Forms.WebView/" rel="nofollow">this example</a>をテストしようとすると、Xamarin

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 App3 
{ 
[Activity(Label = "App3", MainLauncher = true, Icon = "@drawable/icon")] 
public class MainActivity : Activity 
{ 
    int count = 1; 

    const string html = @" 
     <html> 
     <body> 
      <p>Demo calling C# from JavaScript</p> 
      <button type=""button"" onClick=""CSharp.ShowToast()"">Call C# </button> 
     </body> 
    </html>"; 

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

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

     // Get our button from the layout resource, 
     // and attach an event to it 
     Button button = FindViewById<Button>(Resource.Id.MyButton); 

     WebView localWebView = FindViewById<WebView>(Resource.Id.LocalWebView); 
     localWebView.SetWebViewClient(new WebViewClient()); // stops request going to Web Browser 
     localWebView.Settings.JavaScriptEnabled = true; 
     // localWebView.LoadUrl("http://developer.xamarin.com"); 
     // localWebView.LoadUrl("file:///android_asset/index.html"); 
     localWebView.LoadData(html, "text/html", null); 

     button.Click += delegate { button.Text = string.Format("{0} clicks!", count++); }; 
    } 
} 
    class MyJSInterface : Java.Lang.Object 
    { 
     Context context; 

     public MyJSInterface(Context context) 
     { 
      this.context = context; 
     } 

     [Export] 
     [JavascriptInterface] 
     public void ShowToast() 
     { 
      Toast.MakeText(context, "Hello from C#", ToastLength.Short).Show(); 
     } 
    } 
} 

何!

注:あなたがHTMLをロードする前localWebViewMyJavascriptInterfaceのインスタンスを追加する必要が

答えて

1

:私はすでにMono.Android.Export(あなたが[エクスポート]アノテーションを使用することができます)への参照を追加しました:

WebView localWebView = FindViewById<WebView>(Resource.Id.LocalWebView); 
localWebView.SetWebViewClient(new WebViewClient()); // stops request going to Web Browser 
localWebView.Settings.JavaScriptEnabled = true; 

// Add an instance of the Javascript interface named "CSharp" 
localWebView.AddJavascriptInterface(new MyJSInterface(this), "CSharp"); 

localWebView.LoadData(html, "text/html", null); 
+0

ちょうどそれを追加しましたが、まだ何も:( –

+0

を示していないあなたは私が私のために逐語的に動作することを?に私の答えを編集した正確なコードを持っています。 – matthewrdev

+1

おかげで@mattherwrdev、それは私が2ミスを持っていたに見えます最初のものはあなたが修正したもので、もう1つはWevView Interfaceの上にネイティブボタンを追加しています。彼らはネイティブとwebViewが一緒に動作しません。 –

関連する問題