从Android中的webview获取html内容(使用带有C#的Xamarin)

时间:2016-10-03 01:05:31

标签: c# android mobile xamarin webview

我想要做的基本上就是这里所回答的:

how to get html content from a webview?

但是,我在C#中使用Xamarin,最常见答案中的代码是在java中。我试着把它翻译成C#,如下所示:

  public class LoginWebViewController : Activity
{
    WebView localWebView;

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

        SetContentView(Resource.Layout.WebView);

        localWebView = FindViewById<WebView>(Resource.Id.LocalWebView);
        localWebView.SetWebViewClient(new JustWebViewClient());

        localWebView.LoadUrl(LoginOperations.GetTPLoginUrl());

        localWebView.Settings.JavaScriptEnabled = true;
        localWebView.AddJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer");


    }

    class MyJavaScriptInterface
    {
        private Context ctx;

        MyJavaScriptInterface(Context ctx)
        {
            this.ctx = ctx;
        }

        public void showHTML(String html)
        {
            Console.WriteLine(html);
        }

    }
}

但是我收到以下错误:

enter image description here

我尝试将类更改为public但仍然会出现相同的错误。有什么问题?

附加代码:

 public class MyWebViewClient : WebViewClient
{
    public override void OnPageFinished(WebView view, String url)
    {
        base.OnPageFinished(view,url);

        Console.WriteLine("DONE LOADING PAGE");

        view.LoadUrl("javascript:HtmlViewer.showHTML" +
                "('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");


    }
}

1 个答案:

答案 0 :(得分:1)

您的构造函数不公开,您必须从vector<B*>继承。您还必须添加Java.Lang.Object属性。

Export

在你的javascript代码中也是一个错误。您在class MyJavaScriptInterface : Java.Lang.Object { private Context ctx; public MyJavaScriptInterface(Context ctx) { this.ctx = ctx; } public MyJavaScriptInterface(IntPtr handle, JniHandleOwnership transfer) : base (handle, transfer) { } [Export("showHTML")] public void showHTML(string html) { Console.WriteLine(html); } } 之后错过了一个开头(

showHTML