简体   繁体   English

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

[英]Get html content from webview in Android (using Xamarin with C#)

What I want to do is basically what was answered here:我想要做的基本上就是这里的回答:

how to get html content from a webview? 如何从 webview 获取 html 内容?

However, I'm working with Xamarin in C#, and the code given in the top answer is in java.但是,我正在使用 C# 中的 Xamarin,并且顶部答案中给出的代码是在 java 中。 I tried to translate it to C# as follows:我尝试将其转换为 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);
        }

    }
}

But I get the following error:但我收到以下错误:

在此处输入图片说明

I tried changing the class to public but it still gives the same error.我尝试将类更改为 public,但它仍然给出相同的错误。 What is wrong?怎么了?

Additional code:附加代码:

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


    }
}

Your constructor is not public and you have to inherit from Java.Lang.Object .您的构造函数不是公共的,您必须从Java.Lang.Object继承。 You have to add the Export attribute, too.您还必须添加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);
    }
}

And in your javascript code is an error, too.并且在您的 javascript 代码中也是一个错误。 You are missing a opening ( after showHTML .您缺少一个开头(showHTML之后。

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

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

相关问题 如何在 Xamarin 中将数据从 C# 发送到 webview HTML 文件 - How to send data from C# to webview HTML file in Xamarin 如何使用 WebView 在 Xamarin C# 应用程序中为 Android 设置代理? - How to set proxy for Android in a Xamarin C# application using WebView? 在Android Xamarin CrossWalk Webview中从Javascript调用C#函数 - Call C# Function From Javascript in Android Xamarin CrossWalk Webview 在 Xamarin Forms C# 中使用 API 中的 html 内容 - Consume html content from a API in Xamarin Forms C# 解析HTML以使用C#获取内容 - Parsing HTML to get content using C# Xamarin 表格 WebView 从本地 html 内容导航到链接时 Android 和 iOS 之间的不同行为 - Xamarin Form WebView different behavior between Android and iOS when navigating to link from local html content 使用 WebView - Xamarin Android C# 的特定页面不会触发导航事件 - Navigated event doesn't fire up on specific pages using WebView - Xamarin Android C# 使用xamarin / c#从android中的simslot 1和simslot 2获取电话号码 - Get phone number from simslot 1 and simslot 2 in android using xamarin/c# 通过C#按钮控制Webview内容 - Control webview content from C# button Xamarin C# 如何从 android 获取 CellSignalStrengthLte.Rsrp - Xamarin C# How get from android CellSignalStrengthLte.Rsrp
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM