背景
項目當中需要在Winform窗體中嵌入網頁,雖然微軟自帶了WebBrowser控件,但是她是以IE模式運作的,相容性實在太差,找了一圈發現有個叫CefSharp的家夥還不錯,于是就拿來玩了一下。
CefSharp 主要特征
- 支援.NET Framework 4.5.2+
- 支援Winform,WPF
- 基于Chromium核心
- 支援Javascript互操作
- BSD商業開源,位址https://github.com/cefsharp/CefSharp
快速入門
注:筆者的環境是Visual Studio 2019.
- 建立winform項目。
- 打開Nuget包管理器。
- 搜尋CefSharp.WinForms,可以看到目前最新的版本是81.x, 點選安裝。
- 編譯項目,會出現以下錯誤:
CefSharp.Common is unable to proceeed as your current Platform is ‘AnyCPU’. To target AnyCPU please read https://github.com/cefsharp/CefSharp/issues/1714. Alternatively change your Platform to x86 or x64 and the relevant files will be copied automatically. For details on changing your projects Platform see https://docs.microsoft.com/en-gb/visualstudio/ide/how-to-configure-projects-to-target-platforms?view=vs-2017
這是因為編譯的時候預設使用的AnyCPU選項,官方也給出了不同的解決方案,根據其中一種做了以下修改:
- 用文本工具打開項目檔案,找到第一個PropertyGroup節點,添加子節點:<CefSharpAnyCpuSupport>true</CefSharpAnyCpuSupport>
- 修改App.Config,添加probing節點,修改後如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="x86"/>
</assemblyBinding>
</runtime>
</configuration>
- 修改Program的Main函數,如下:
static void Main()
{
var settings = new CefSettings();
settings.BrowserSubprocessPath =System.IO.Path.GetFullPath(@"x86\CefSharp.BrowserSubprocess.exe");
Cef.Initialize(settings, performDependencyCheck: false, browserProcessHandler: null);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
- 最後在Form裡面嵌入浏覽器控件即可:
public Form1()
{
InitializeComponent();
ChromiumWebBrowser browser = new ChromiumWebBrowser("http://www.bigname65.com");
browser.Dock = DockStyle.Fill;
this.Controls.Add(browser);
}