2016-12-03 102 views
1

我有一个WebView,在其中显示我的网站,在该网站中,我有3个页面,我需要识别用户在最后一页上的3个页面,获取显示该页面的html内容。Xamarin Android:获取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
  1. 创建包含方法如果您的Android API级别17或更高版本可以从JavaScript
  2. 称为C#类,这个类需要标注每个JavaScript的调用方法与[JavascriptInterface]和[出口]
  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); 
    } 
} 

}