繁体   English   中英

在 Xamarin 中从 JavaScript 调用 C#

[英]Calling C# from JavaScript in Xamarin

试图测试 这个例子,但发现它对我不起作用,我使用 API19,我的代码是:

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();
        }
    }
}

我在这里有什么错误!

注意:我已经添加了对 Mono.Android.Export 的引用(因此您可以使用 [Export] 注释):

在加载 HTML 之前,您需要将MyJavascriptInterface的实例添加到localWebView

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM