2016-12-03 101 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); 
    } 
} 

}