参考https://www.liangzl.com/get-article-detail-198487.html
- 第一步,新建VS项目(目前最新版79需要Framework4.5.2)后,修改平台为X86或X64,Cef有32和64位之分:
- 第二步,使用NuGet搜索cef,安装CefSharp.WPF,其他cef.redist、CefSharp三个将自动安装,因为它们之间存在依赖关系。
- 第三步,写入初始化浏览器代码 定义浏览器对象
public ChromiumWebBrowser Browser;
//初始化浏览器并启动
public void InitializeChromium()
{
/*配置浏览器属性*/
var settings = new CefSettings()
{
Locale = "zh-CN",
CachePath = Directory.GetCurrentDirectory() + @"\Cache"
};
settings.CefCommandLineArgs.Add("proxy-auto-detect", "0");
settings.CefCommandLineArgs.Add("no-proxy-server", "1");
Cef.Initialize(settings);
//创建实例
Browser = new ChromiumWebBrowser("www.baidu.com");
Browser.Width = 1080;
Browser.Height = 1920;
//添加控件
this.can.Children.Add(Browser);
//禁用弹窗
Browser.LifeSpanHandler = new LifeSpanHandler();
//禁用右键菜单
Browser.MenuHandler = new MenuHandler();
}
不弹出子窗体
控制弹窗的接口是ILifeSpanHandler,并实现OnBeforePopup方法。如下:
定义LifeSpanHandler类:
using CefSharp;
using CefSharp.WinForms;
namespace CefTest
{
internal class LifeSpanHandler : ILifeSpanHandler
{
//弹出前触发的事件
public bool OnBeforePopup(IWebBrowser webBrowser, IBrowser browser, IFrame frame, string targetUrl,
string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures,
IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
{
//使用源窗口打开链接,取消创建新窗口
newBrowser = null;
var chromiumWebBrowser = (ChromiumWebBrowser)webBrowser;
chromiumWebBrowser.Load(targetUrl);
return true;
}
public void OnAfterCreated(IWebBrowser chromiumWebBrowser, IBrowser browser)
{
}
public bool DoClose(IWebBrowser chromiumWebBrowser, IBrowser browser)
{
return true;
}
public void OnBeforeClose(IWebBrowser chromiumWebBrowser, IBrowser browser)
{
}
}
}
调用方式
ChromeBrowser.LifeSpanHandler = new LifeSpanHandler();
禁用右键
禁用右键的接口是IContextMenuHandler,并实现OnBeforeContextMenu 方法。如下:
定义MenuHandler类:
using CefSharp;
namespace CefTest
{
internal class MenuHandler : IContextMenuHandler
{
public void OnBeforeContextMenu(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters,
IMenuModel model)
{
model.Clear();
}
public bool OnContextMenuCommand(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters,
CefMenuCommand commandId, CefEventFlags eventFlags)
{
return false;
}
public void OnContextMenuDismissed(IWebBrowser webBrowser, IBrowser browser, IFrame frame)
{
}
public bool RunContextMenu(IWebBrowser webBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters,
IMenuModel model, IRunContextMenuCallback callback)
{
return false;
}
}
}
调用方式
ChromeBrowser.MenuHandler = new MenuHandler();
禁用GPU加速
var settings = new CefSettings();
settings.CefCommandLineArgs.Add("disable-gpu"); // Disable GPU acceleration
settings.CefCommandLineArgs.Add("disable-gpu-vsync"); //Disable GPU vsync
Cef.Initialize(settings);