WinForm中内嵌WebBroswer

本文系原创。  

  前两天在工作中需要在Winform的窗体中内嵌的一个浏览器,我们都知道winform其实是自带了WebBroswer控件的,但是这个控件是IE的浏览器,存在这样那样的兼容性问题,不能完全满足的需求,所以就研究了下其他的开源浏览器框架,内嵌到我们的窗体中,完成了产品需求,以下做一个记录和分享。

  由于产品是要做商用的,所以必须得考虑开源性和开源协议的问题。研究了Geckofx、CefSharp这两个组件,其中Geckofx的开源许可证为MPL,CefSharp开源许可证为BSD。

  CefSharp

  CEF(Chromium Embedded Framework, 嵌入式Chromium框架)是C/C++开发的库。目前 Google Chrome(Google浏览器),Chromium浏览器,Opera等都是基于CEF为核心,Webkit引擎的浏览器。

  CefSharp组件的下载地址:https://www.nuget.org/packages/CefSharp.WinForms/49.0.1。注意下载的是NuGet包,需要自己安装到本地,CefSharp和.NET FrameWork版本要相对应,另外CEF不能自适应 x86/x64,必须选择一个目标,下载的包中是同时带了x86和x64依赖组件的,根据目标来选择使用,其中核心依赖的dll为:CefSharp.Core.dll、CefSharp.dll、CefSharp.WinForms.dll。

  代码部分:

  

 1 private void FormWebBroswer_Load(object sender, EventArgs e)
 2         {
 3             InitBroswer("https://www.cnblogs.com");
 4         }
 5
 6         private void InitBroswer(String url)
 7         {
 8             if (!Cef.IsInitialized)
 9             {
10                 var settings = new CefSettings()
11                 {
12                     Locale = "zh-CN",
13                     AcceptLanguageList = "zh-CN",
14                     MultiThreadedMessageLoop = true
15                 };
16                 Cef.Initialize(settings);
17
18                 Cef.EnableHighDPISupport();
19             }
20
21             m_broswer = new ChromiumWebBrowser(url);
22             m_broswer.Dock = DockStyle.Fill;
23             m_panel.Controls.Add(m_broswer);
24         }
25
26         private void m_textBoxUrl_KeyDown(object sender, KeyEventArgs e)
27         {
28             if (e.KeyData == Keys.Enter)
29             {
30                 if (m_broswer != null)
31                 {
32                     m_broswer.Load(m_textBoxUrl.Text);
33                 }
34             }
35         }

注意:

  • 同一个进程中打开多个浏览器时最好不要多次Cef.Initialize(settings),可能会有问题;
  • Cef.EnableHighDPISupport(),可有效解决高分别率下屏幕闪烁问题。

效果:

  Geckofx

  Geckofx是skybound工作室开发的一个开源的用于方便将gecko引擎(最主要的浏览器是firefox)链接到.net 窗体应用的一个组件。

  Geckofx下载地址:https://www.nuget.org/packages/Geckofx45,下载的时候同样也要考虑.NET FrameWork版本和目标平台,x86和x64实在不同的程序包中的,根据需要下载。依赖的组件主要包括Geckofx-Core.dll、Geckofx-Winforms.dll及运行时环境xulrunner。

  编写代码:

  

 1  private readonly String xulRunnerPath = Application.StartupPath + "/xulrunner";
 2         private GeckoWebBrowser m_webBrowser;
 3
 4         public FormWebBroswer()
 5         {
 6             InitializeComponent();
 7             if (!Xpcom.IsInitialized)
 8             {
 9                 Xpcom.Initialize(xulRunnerPath);
10             }
11         }
12
13         private void FormWebBroswer_Load(object sender, EventArgs e)
14         {
15             m_webBrowser = new GeckoWebBrowser();
16             m_webBrowser.Dock = DockStyle.Fill;
17
18             m_panelContainer.Controls.Add(m_webBrowser);
19
20             m_webBrowser.Navigate("https://www.sina.com.cn/");
21         }

效果:

注意:Geckofx win64、.NET FrameWork4.0版本不太好找,个别版本存在内存泄漏问题,谨慎选择。

原文地址:https://www.cnblogs.com/mohanchen/p/9037975.html

时间: 2024-10-14 23:58:29

WinForm中内嵌WebBroswer的相关文章

android之在view中内嵌浏览器的方法

我要做的一个东西是在一个页面的中间嵌入浏览器,一开始不知道从哪里开始,因为以前用的都是Textveiw或者editVeiw之类的控件,而它们并不能用来显示网页的内容,怎么办呢? 首先想到的是:是不是有一个用来显示网页的View呢,于是我就在eclipse里xml编辑器里输入<web,哈哈,果然下面有个提示是webVeiw,那么能不能用它呢?于是到网上搜一下它的资料,果然可以的,下面就开始吧. 先在xml里把webview建好,在代码里用findViewById()将其取出来.我的代码是: Web

转载 [WPF][C#]在WPF中内嵌WindowsForm控件-使用WindowsFormsControlLibrary

[WPF][C#]在WPF中内嵌WindowsForm控件-使用WindowsFormsControlLibrary 在[WPF][C#]在WPF中内嵌WindowsForm控件一文中为各位介绍了直接在WPF中使用XAML来嵌入Windows Form控件的作法,不过不是每个人都喜欢写XAML,而且有时候会需要把已经存在的Windows Form应用程序嵌入到WPF中,所以这次就来跟大家介绍怎么使用参考dll档的方式,把dll中的Windows Form加到WPF中. 都说了要使用Windows

7.PL_SQL——在PL_SQL程序中内嵌查询语句、DML语句和事物处理语句

在PL/SQL中可以使用的SQL语句主要有以下几类: SELECT 查询语句,DML语句,Transaction 事物处理语句,本文将对这几类语句在PL/SQL中的用法逐一介绍. 一.查询语句-SELECT SELECT 语句用来查询一条或多条语句.虽然SELECT 语句也属于DML语句,但SELECT是只读的,所以单独列出. 在PL/SQL中使用SELECT 语句的格式如下:   SELECT select_list INTO {variable_name[,variable_name]...

【转】WebResource实现在自定义控件中内嵌JS文件

在类库中的资源  其他项目中要使用 需要嵌入才行 参考文献:WebResource实现在自定义控件中内嵌JS文件 1. WebResource简介 ASP.NET(1.0/1.1)给我们提供了一个开发WebControl的编程模型,于是我们摆脱了asp里面的include模式的复用方式.不过1.0/1.1提供的Web控件开发模型对于处理没有image.css等外部资源的组件还算比较得心应手,script虽然很多时候也是外部资源,但在开发控件的时候我们习惯把script使用Page.Registe

C# winform datagridview 内嵌控件值改变后立即触发事件,而不需要离开该单元格时才触发,此时需要用到dgv_CurrentCellDirtyStateChanged事件

以下是参考代码 //datagridview内嵌控件值修改事件 private void dgv_CurrentCellDirtyStateChanged(object sender, EventArgs e) { if (dgv.IsCurrentCellDirty) { dgv.CurrentCellDirtyStateChanged -= dgv_CurrentCellDirtyStateChanged; dgv.CommitEdit(DataGridViewDataErrorContex

MFC 在父对话框中内嵌子对话框

MFC 在父对话框中内嵌子对话框 分类: MFC2012-10-10 21:46 2222人阅读 评论(4) 收藏 举报 mfcborder 原文地址:http://blog.csdn.net/leesaiya/article/details/7374537 [cpp] view plaincopy 一.对话框中显示对话框的方法: 1.首先创建要在对话框里显示的那个对话框,命名为:IDD_INNER. 设置这个对话框的属性: 1).“Style”选择“Child”:中文版“样式”选择“下层”.

GCC在C语言中内嵌汇编 asm __volatile__ 【转】

转自:http://blog.csdn.net/pbymw8iwm/article/details/8227839 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作. 1.简单的内嵌汇编 例: __asm__ __volatile__("hlt"); "__asm__"表示后面的

css中内嵌,内联以及外联的区别

在学习css的过程中,经常会用到内嵌,内联以及外联这三种,接下来我就对于自己所学的一点介绍一下: 1.内嵌 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <h1 style="color:red;">

pdf中内嵌字体问题

在提交论文pdf到IEEE时总要检查字体是否为内嵌的,查看pdf中所有字体及是否内嵌可查看:http://sinme.blog.sohu.com/120043575.html. 具体做法是: 在pdf格式的文件中,点"文件"-> "文档属性"-> "字体",显示的就是你文档中用的所有字体了,每一个字体后面,如果注明了"embeded(已嵌入)"或"embeded subset(已嵌入子集)",就