【问题标题】:Xamarin Android: Get HTML contentXamarin Android:获取 HTML 内容
【发布时间】:2016-12-03 01:17:21
【问题描述】:

我有一个 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;
        }


    }




}

}

谢谢。

【问题讨论】:

    标签: android xamarin webview


    【解决方案1】:
    1. 创建一个包含要从 javaScript 调用的方法的 c# 类
    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);
        }
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 2012-10-22
      相关资源
      最近更新 更多