WPF下CefSharp的使用
之前一直使用WPF自带的WebBrowser
控件,但由于它使用的是IE内核,巨无敌难用,还各种报错。于是换了一个开源的浏览器包CefSharp,它支持Winform和WPF,内嵌了Chrome浏览器组件并且有比较详细的说明文档。
开源项目地址
官方中文帮助文档
安装
- 通过Nuget安装,右击项目 -> 管理Nuget程序包 -> 在打开的界面中搜索CefSharp,依次安装
CefSharp.Common
和CefSharp.Wpf
,至于cef.redist.x64
和cef.redist.x86
会自动安装。
配置解决方案平台
因为CefSharp不支持ANYCPU所以要配置x86、x64,点击菜单生成 -> 配置管理器。选择解决方案平台,点击编辑,先将x64和x86删掉,再重新新建,重新配置比较容易些。
使用
使用时可以直接在xaml文件中直接添加ChromiumWebBrowser
控件,不过ChromiumWebBrowser
控件特别消耗内存,所以代码里动态添加也是一种不错的选择。
在xaml中添加浏览器
xmal文件头部插入引用
xmlns:wpf="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
,添加控件如下:<Grid x:Name="ctrlBrowerGrid"><wpf:ChromiumWebBrowser x:Name="Browser"/> </Grid>
cs文件中操作控件访问网址:
Browser.Load(“www.baidu.com”);
动态添加浏览器
添加浏览器类:
internal sealed class CollapsableChromiumWebBrowser : ChromiumWebBrowser {public CollapsableChromiumWebBrowser(){this.Loaded += this.BrowserLoaded;}private void BrowserLoaded(object sender, System.Windows.RoutedEventArgs e){// Avoid loading CEF in designerif (DesignerProperties.GetIsInDesignMode(this))return;// Avoid NRE in AbstractRenderHandler.OnPaintApplyTemplate();CreateOffscreenBrowser(new Size(400, 400));} }
动态添加和操作控件:
CollapsableChromiumWebBrowser Browser = new CollapsableChromiumWebBrowser(); //页面插入控件 ctrlBrowerGrid.Children.Add(Browser); //这里不能用Load()的方法,会报错。 Browser.Address = “www.baidu.com”;
获取Cookie和Html
添加Cookie访问类
public class CookieVisitor : ICookieVisitor {public static string Cookies = null;public static string Html = null;public event Action<object> Action;public bool Visit(CefSharp.Cookie cookie, int count, int total, ref bool deleteCookie){if(count == 0)Cookies = null;Cookies += cookie.Name + "=" + cookie.Value + ";";deleteCookie = false;return true;}public void Dispose() {if (Action != null)Action((Html, Cookies));return;} }
添加Cookie和Html获取回调函数
public async void RecieveCookie(object data) {(string html,string cookies) = ((string,string))data;return; }
浏览器控件访问网址,并设置回调
async void LoadWebBrowser() {Browser.FrameLoadEnd += Browser_FrameLoadEnd;Browser.Address = "www.baidu.com"; }private async void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) {CookieVisitor.Html = await Browser.GetSourceAsync();CookieVisitor visitor = new CookieVisitor();visitor.Action += RecieveCookie;Cef.GetGlobalCookieManager().VisitAllCookies(visitor);return; }
WPF下CefSharp的使用相关推荐
- Winform下CefSharp的引用、配置、实例与报错排除(源码)
Winform下CefSharp的引用.配置.实例与报错排除 本文详细介绍了CefSharp在vs2013..net4.0环境下,创建Winfrom项目.引用CefSharp的方法,演示了winfro ...
- cefsharp已停止工作_Winform下CefSharp的引用、配置、实例与报错排除(源码)
Winform下CefSharp的引用.配置.实例与报错排除(源码) Winform 下 CefSharp 的引用, 配置, 实例与报错排除 [TOC] 1, 关于 CefSharp 装一手, 比较简 ...
- 【一】C# 基于WPF 使用CefSharp来做万能爬虫
目录 [一]C# 基于WPF 使用CefSharp来做万能爬虫 [二]C# 基于WPF 使用CefSharp来做万能爬虫 [三]C# 基于WPF 使用CefSharp来做万能爬虫 [四]C# 基于WP ...
- WPF下字体模糊的问题
WPF下字体模糊的问题 原文:WPF下字体模糊的问题 一直以来,发现WPF中的小字体下的文字变得比较模糊,比如: WPF与Winform字体显示比较: 为了看到更清楚,我们放大点显示: 放得更大些: ...
- WPF中CefSharp的使用(在WPF中使用快乐的使用chrome)
Chromium Embedded Framework(Cef) 使用的是google chrome 内核 chromium 安装: PM> Install-Package CefSharp.W ...
- WPF下的视频录制界面设计
原文:WPF下的视频录制界面设计 在去年12月份,我曾经写过三篇文章讨论C#下视频录制.播放界面的设计.这三篇文章是: 利用C#画视频录制及播放的界面(一) 利用C#画视频录制及播放的界面(二) 利用 ...
- C# 浅谈基于Wpf下的MVVM模式的设计思想
目录 一.Model实体层 二.ViewModel视图模型层 1.定义属性通知基类 1.1 数据验证接口的实现 1.2 验证标识类定义 2.ViewModel前端交互实现 2.1 ICommand命令 ...
- WPF下聊天气泡的实现
零.版本履历 日期 说明 2020.05.02 初稿 一.效果 先看最终效果. 最终微聊烂尾了,更确切地说,还没开始就结束了. 二.由来 产品虽然没有最终做出来,但至少聊天气泡打磨的还挺像样的. 说说 ...
- C# WPF使用CefSharp客户端内嵌浏览器做一个开小差工具
前言 CefSharp是一个C#客户端内嵌入chromium开源项目浏览器的工具,方便在客户端中自然的访问网页内容,十分好用.当然,网上有很多使用CefSharp的教程了,怎么使用都很详尽.我这里只是 ...
- WPF 下TextBox 换行与 C#下TextBox换行
有时候在WPF中要设置TEXTBOX自动换行 1.到文本框边缘后会自动换行 TextWrapping=Wrap 2.设置按Enter 健换行 AcceptsReturn=True 在C#下属性与WPF ...
最新文章
- centos7中输入ifconfig出现ens33,没有eth0
- [No0000D2]ClearCSharp编程清理脚本批处理bat
- 【问底】严澜:数据挖掘入门——分词
- CRNN:端到端不定长文字识别算法
- 关于ViewGroup中requestDisallowInterceptTouchEvent的用法
- 一个按键控制数码管的开和关_基于FPGA的数字电路实验3:点亮数码管
- hive复合数据类型之map
- 打造扛得住的MySQL数据库架构-第2章 什么影响了MySQL性能
- python中if的输入格式_Python基础之输出格式和If判断
- 西安python_西安找工作|西安人才网|西安全职招聘信息-西安58同城
- C++string的查找和替换
- 高级语言 和 低级语言 的区别
- 【C语言初阶】——简易版·扫雷(9*9)【运行逻辑思维导图+细节讲解+源码】【初级】
- 台湾ICPlus IP175GHI, 85nm /极低功率,5接口10/100以太网集成交换机芯片
- 【解决方案】Error response from daemon: Conflict. The container name /mongo is already in use by contain
- bootstrap手风琴_快速提示:如何自定义Bootstrap 4的手风琴组件
- 使用canvas对图片进行裁切
- FAQ:Nacos报错:server is DOWN now, please try again later!
- 十七、网上商城项目(5)
- php artisan dumpautoload,artisan 命令使用总结