android - Xamarin Android : Get HTML content

标签 android xamarin webview

我有一个 WebView,在其中显示我的网站,在该网站中我有 3 个按顺序的页面,在这 3 个页面中,我需要识别用户何时位于最后一页,并从中获取 html 内容显示该页面。

我设法做了一个 WebViewClient,现在我可以识别用户何时位于最后一页,问题是我不知道如何移动它,我不知道如何从中获取 html 内容那个页面。

这是我到目前为止所拥有的:

namespace WebViewExample
{
  [Activity(Label = "WebView", MainLauncher = true)]
  public class WebView : Activity
{
    Android.Webkit.WebView web_view;
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.WebView);

        web_view = FindViewById<Android.Webkit.WebView>(Resource.Id.webview);
        web_view.Settings.JavaScriptEnabled = true;
        web_view.SetWebViewClient(new MyWebViewClient());

        web_view.LoadUrl(url);
    }

    public class MyWebViewClient : WebViewClient
    {

        public override bool ShouldOverrideUrlLoading(Android.Webkit.WebView view, string url)
        {
            view.LoadUrl(url);
            return true;
        }

        public override void OnPageStarted(Android.Webkit.WebView view, string url, Android.Graphics.Bitmap favicon)
        {
            base.OnPageStarted(view, url, favicon);
        }

        public override void OnPageFinished(Android.Webkit.WebView view, string url)
        {
            base.OnPageFinished(view, url);
            int i = 0;
        }


    }




}

}

谢谢。

最佳答案

  1. 创建一个 C# 类,其中包含要从 javaScript 调用的方法
  2. 如果您的 Android API 级别为 17 或更高版本,此类需要使用 [JavascriptInterface] 和 [Export] 注释每个 JavaScript 可调用方法
  3. 您的 WebView 应调用 AddJavascriptInterface() 方法
  4. 页面加载完成时会调用onPageFinished()方法

这是代码:

namespace WebViewTest{
[Activity(Label = "WebViewTest", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
    Android.Webkit.WebView web_view;
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.Main);
        web_view = FindViewById<Android.Webkit.WebView>(Resource.Id.webview);
        web_view.Settings.JavaScriptEnabled = true;
        web_view.SetWebViewClient(new MyWebViewClient());
        web_view.LoadUrl("http://stackoverflow.com/questions/40943265/xamarin-android-get-html-content");
        // 3. your WebView must call AddJavascriptInterface() method 
        web_view.AddJavascriptInterface(new InJavaScriptLocalObj(), "local_obj");
    }
}

public class MyWebViewClient : WebViewClient
{
    private int count;
    public override bool ShouldOverrideUrlLoading(Android.Webkit.WebView view, string url)
    {
        view.LoadUrl(url);
        return true;
    }

    public override void OnPageStarted(Android.Webkit.WebView view, string url, Android.Graphics.Bitmap favicon)
    {
        base.OnPageStarted(view, url, favicon);

    }

    public override void OnPageFinished(Android.Webkit.WebView view, string url)
    {
        base.OnPageFinished(view, url);
        count++;
        //page count 
        //  4.The method of onPageFinished() will be called when page loading finished
        if (count == 2)
        {
            view.LoadUrl("javascript:window.local_obj.showSource('<head>'+"
            + "document.getElementsByTagName('html')[0].innerHTML+'</head>');");
            count = 0;
        }
    }
}
//1. Create a c# class that contains methods to be called from javaScript.
//The Method is that called in javaScript.
public sealed class InJavaScriptLocalObj : Java.Lang.Object
{
    //2.if your Android API level 17 or later, 
    //This class must annotate each JavaScript-callable method with [JavascriptInterface] and [Export]
    [Export]
    [JavascriptInterface]

    public void showSource(string html)
    {
        // System.out.println("====>html=" + html);
    }
}

}

关于android - Xamarin Android : Get HTML content,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40943265/

相关文章:

android - 禁用锁定屏幕

java - 键盘打开时 WebView 调整屏幕大小

ios - Titanium Studio Webview 不允许我与网站互动

android - 不用sdcard创建备份数据库

android - 使用 Glide 将图像加载到 Google map 标记

java - 从弹出窗口获取单选按钮值到 TextView

c# - xamarin 选择器控件 selectedindexchange 事件仅在完成选择项目时引发

android - 如何以编程方式将 tableRow 添加到 Xamarin 中的 TableLayout

ios - Xamarin.iOS 绑定(bind)抛出 "Error MT5212: Native linking failed, duplicate symbol"

android - @Android display/res/viewable 在 WebView