我要做的基本上是在这里回答的内容:

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

    }
}


但是我收到以下错误:

c# - 从Android中的Webview获取html内容(将Xamarin与C#结合使用)-LMLPHP

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


    }
}

最佳答案

您的构造函数不是公共的,您必须从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(" + ...

关于c# - 从Android中的Webview获取html内容(将Xamarin与C#结合使用),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39823297/

10-10 14:00
查看更多