WinForm中内嵌WebBroswer

Posted 王小豆的烂笔头

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
18             m_panelContainer.Controls.Add(m_webBrowser);
20             m_webBrowser.Navigate("https://www.sina.com.cn/");
21         }

效果:

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

 

以上是关于WinForm中内嵌WebBroswer的主要内容,如果未能解决你的问题,请参考以下文章

java中内嵌浏览器怎么用

STC单片机Keil C代码中内嵌汇编代码段示例

在antd的table中内嵌分页按钮

在当前网页中内嵌一个网页框架

C#在WinForm中使用WebKit传递js对象实现与网页交互的方法

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