这两种依赖于设备的技术在HTML页面加载完成后使用Javascript评估/执行,以便将整个html内容作为Javascript结果接收(如果您的要求不要求整个页面返回,请编辑示例中的Javascript )。
Xamarin.Android
您可以通过分配实现IValueCallback
的子类WebViewClient
来捕获WebView
加载的html。 页面加载完成后, OnReceiveValue
方法将包含html内容:
示例WebViewClient
类:
public class EmbeddedWebViewClient : WebViewClient, IValueCallback { public EmbeddedWebViewClient(WebView view) { view.Settings.JavascriptEnabled = true; } public override void OnPageFinished(WebView view, string url) { base.OnPageFinished(view, url); Log.Info("SO", $"Page loaded from: {url}"); view.EvaluateJavascript("(function() { return (''+document.getElementsByTagName('html')[0].innerHTML+''); })();", this); } public void OnReceiveValue(Java.Lang.Object value) { // "value" holds the html contents of the loaded page Log.Debug("SO", ((string)value).Substring(0, 40)); } }
WebViewClient用法示例:
WebView webview = FindViewById(Resource.Id.webview); webview.SetWebViewClient(new EmbeddedWebViewClient(webview)); webview.LoadUrl("https://xamarin.com");
Xamarin.iOS
您可以通过WKWebView
分配IWKNavigationDelegate
来捕获WKWebView
加载的html。 在其自己的类或包含WKWebView
的控制器中实现它
示例IWKNavigationDelegate
实现:
public class NavigationDelegate : NSObject, IWKNavigationDelegate { [Export("webView:didFinishNavigation:")] public async void DidFinishNavigation(WKWebView webView, WKNavigation navigation) { var cOntent= await webView.EvaluateJavascriptAsync("(function() { return (''+document.getElementsByTagName('html')[0].innerHTML+''); })();"); var html = FromObject(content); Console.WriteLine((html.ToString()).Substring(0, 40)); } }
示例WKWebView用法:
wkwebview = new WKWebView(UIScreen.MainScreen.Bounds, new WKWebViewConfiguration()); wkwebview.NavigatiOnDelegate= new NavigationDelegate(); Add(wkwebview); wkwebview.LoadRequest(new NSUrlRequest(new Uri("https://xamarin.com")));
注意:这个基本逻辑可以用UIWebView
完成,但WKWebView
要快得多,如果你不需要支持iOS 7客户端,我个人会专注于使用WKWebView
上述就是C#学习教程:在Xamarin浏览器控件中访问html响应内容分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—编程笔记