CefSharp开发笔记
应用开发过程有时候需要用到内嵌浏览器来显示HTML文件或网页。
WPF本身提供了一个WebBrowser控件,可以实现基本的浏览器功能。
另外还有CefSharp控件,相当于是基于谷歌的开源浏览器封装的,也可以实现内嵌浏览器的功能。
安装
WPF使用时,如果是.NET Framework安装:
Install-Package CefSharp.Wpf
如果是.NET CORE安装:
Install-Package CefSharp.OffScreen.NETCore
使用示例
需要在App.xaml.cs文件中添加:
protected override void OnStartup(StartupEventArgs e)
{
Cef.Initialize(new CefSettings(), performDependencyCheck: true, browserProcessHandler: null);
base.OnStartup(e);
}
protected override void OnExit(ExitEventArgs e)
{
base.OnExit(e);
Cef.Shutdown();
}
注意:Cef.Initialize语句需要放在 base.OnStartup(e)之前,不然有可能会报异常。
前台代码:
xmlns:cef="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
<cef:ChromiumWebBrowser x:Name="browser" />
如何是直接加载HTML文本,使用下面的语句:
browser.LoadHtml(htmlContent, "http://localhost");
第一个参数是 HTML 内容字符串。
第二个参数是基 URL,用于解析相对路径(例如,CSS 和 JavaScript 文件)。在这个例子中,我们使用 "http://localhost" 作为基 URL。
加载网址:
_browser.Load(webUrl);
FAQ
点击链接时,用系统默认浏览器打开
安装一个类:
public class CustomLifeSpanHandler : ILifeSpanHandler
{
public bool OnBeforePopup(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, string targetUrl,
string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures,
IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
{
if (chromiumWebBrowser is ChromiumWebBrowser)
{
Process.Start(new ProcessStartInfo(targetUrl) { UseShellExecute = true });
}
newBrowser = null;
return true;
}
public void OnAfterCreated(IWebBrowser chromiumWebBrowser, IBrowser browser)
{
}
public bool DoClose(IWebBrowser chromiumWebBrowser, IBrowser browser)
{
return false;
}
public void OnBeforeClose(IWebBrowser chromiumWebBrowser, IBrowser browser)
{
}
}
在控件初始化时:
public partial class UcDataInfo : UserControl
{
public UcDataInfo()
{
InitializeComponent();
browser.LifeSpanHandler = new CustomLifeSpanHandler();
}
}
重新加载网页时,把滚动条复位到控件的顶部
目前不是很明确,GPT出来,说是通过调用JavaScript来实现,但试了一上,有报一些异常。
private async void ScrollToTop_Click(object sender, EventArgs e)
{
// 执行 JavaScript 代码滚动到页面顶部
await browser.EvaluateScriptAsync("window.scrollTo(0, 0);");
}
本来想直接找出控件的ScrollBar,然后直接去操作,说是基于Cef封装的,没有ScrollBar控件。
缩放网页的内容
_browser.SetZoomLevel(1.0);
其中1.0是100%,1.5是150%。