热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#学习教程:在Xamarin浏览器控件中访问html响应内容分享

在Xamarin浏览器控件中访问html响应内容我的同事和我无法在我们的Xamarin项目中实现,这似乎是一个不寻常的要求。我们要做的是动态处理浏览器导航到的任何页面的内容,而不是

在Xamarin浏览器控件中访问html响应内容

我的同事和我无法在我们的Xamarin项目中实现,这似乎是一个不寻常的要求。 我们要做的是动态处理浏览器导航到的任何页面的内容,而不是简单地从它访问的初始URL返回的内容。

我见过用于访问以这种方式返回的内容的解决方案:

Xamarin:如何在WebView中从页面获取HTML?

但是,此代码仅在浏览器从其指向的初始URL接收到第一个html响应时才会运行。 我们需要动态处理浏览器收到的任何内容,即使它被重定向到不同的URL或用户点击内容中的链接。 我们使用WebBrowser.DocumentCompleted事件在我们的.NET本机Windows客户端中实现了这一点,该事件在控件加载内容时引发。 当Xamarin WebViewRendered加载除第一次加载之外的内容时,我们没有发现任何引发的事件或方法,因此我们无法获得后续资源的内容。

总结一下:如何动态获取Web浏览器导航到的任何URL的内容? 答案可以包括可部署到Android和iOS的.NET Xamarin项目中可访问的任何内容,包括第三方开源代码。

这两种依赖于设备的技术在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#学习教程,希望大家多多关注—编程笔记


推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 在C#中,使用关键字abstract来定义抽象类和抽象方法。抽象类是一种不能被实例化的类,它只提供部分实现,但可以被其他类继承并创建实例。抽象类可以用于类、方法、属性、索引器和事件。在一个类声明中使用abstract表示该类倾向于作为其他类的基类成员被标识为抽象,或者被包含在一个抽象类中,必须由其派生类实现。本文介绍了C#中抽象类和抽象方法的基础知识,并提供了一个示例代码。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Firefox火狐浏览器关闭到http://detectportal.firefox.com的流量问题解决办法
    本文介绍了使用Firefox火狐浏览器时出现关闭到http://detectportal.firefox.com的流量问题,并提供了解决办法。问题的本质是因为火狐默认开启了Captive portal技术,当连接需要认证的WiFi时,火狐会跳出认证界面。通过修改about:config中的network.captive-portal-service.en的值为false,可以解决该问题。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 在C#/ .NET中,处理基督面前的日期没有内置支持,需要编写自己的代码。本文介绍了在处理此类日期时的最佳方法,并提供了一个示例链接,可以参考编码的解决方案。 ... [详细]
  • Unity3D引擎的体系结构和功能详解
    本文详细介绍了Unity3D引擎的体系结构和功能。Unity3D是一个屡获殊荣的工具,用于创建交互式3D应用程序。它由游戏引擎和编辑器组成,支持C#、Boo和JavaScript脚本编程。该引擎涵盖了声音、图形、物理和网络功能等主题。Unity编辑器具有多语言脚本编辑器和预制装配系统等特点。本文还介绍了Unity的许可证情况。Unity基本功能有限的免费,适用于PC、MAC和Web开发。其他平台或完整的功能集需要购买许可证。 ... [详细]
  • 本文介绍了在C#中SByte类型的GetHashCode方法,该方法用于获取当前SByte实例的HashCode。给出了该方法的语法和返回值,并提供了一个示例程序演示了该方法的使用。 ... [详细]
  • 由于同源策略的限制,满足同源的脚本才可以获取资源。虽然这样有助于保障网络安全,但另一方面也限制了资源的使用。那么如何实现跨域呢,以下是实现跨域的一些方法。 ... [详细]
author-avatar
joyjz
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有