【问题标题】:Get html content from webview in Android (using Xamarin with C#)从 Android 中的 webview 获取 html 内容(使用 Xamarin 和 C#)
【发布时间】:2016-10-03 01:05:30
【问题描述】:

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

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

    }
}

但我收到以下错误:

我尝试将类更改为 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>');");


    }
}

【问题讨论】:

    标签: c# android mobile xamarin webview


    【解决方案1】:

    您的构造函数不是公开的,您必须从Java.Lang.Object 继承。您还必须添加Export 属性。

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

    在您的 javascript 代码中也是一个错误。在showHTML 之后,您缺少一个开头的(

    view.LoadUrl("javascript:HtmlViewer.showHTML(" + ...
    

    【讨论】:

    • 感谢您的帮助。对于那些关注这一点的人,当您在此处使用 ExportAttribute 或 ExportFieldAttribute i.imgur.com/lXWroHB.png 时,您可能需要添加对 Mono.Android.Export.Dll 的引用
    猜你喜欢
    • 1970-01-01
    • 2012-06-04
    • 2017-02-23
    • 2012-01-02
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    相关资源
    最近更新 更多