CefSharp 参数说明
-
捕获按键,包括F12调出控制台调试、F5刷新;
-
添加缓存功能,指定缓存文件路径;
-
加载网页,等待时间用 Loading.gif动画代替;
-
禁用新弹窗;
-
隐藏鼠标右键,不弹无用菜单。
Winform 代码
using CefSharp;
using CefSharp.WinForms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CefSharpDemo
{
public partial class CefSharpFrm : Form
{
ChromiumWebBrowser browser;
public CefSharpFrm()
{
InitializeComponent();
InitializeChromium("www.baidu.com");
}
/// <summary>
/// 初始化浏览器并启动
/// </summary>
/// <param name="url">网址</param>
public void InitializeChromium(String url)
{
CefSettings settings = new CefSettings
{
Locale = "zh-CN",// 设置语言
PersistSessionCookies = true, // cookies
LogFile = System.IO.Path.GetFullPath("cache\\LogData"), // 用于调试日志的目录和文件名
CachePath = System.IO.Path.GetFullPath("cache\\CacheFile") // 全局浏览器缓存的数据将存储在磁盘上的位置
};
settings.CefCommandLineArgs.Add("disable-gpu", "1"); // 禁用GPU加速
settings.CefCommandLineArgs.Add("--disable-web-security", "1"); // 跨域
Cef.Initialize(settings);
// 创建浏览器组件
browser = new ChromiumWebBrowser(url);
browser.MenuHandler = new MenuHandler();// 禁用右键菜单
browser.LifeSpanHandler = new LifeSpanHandler(); //禁用新弹窗
browser.KeyboardHandler = new CEFKeyBoardHander();// 捕获按键,做对应操作,包括F12,调出控制台调试
browser.FrameLoadStart += new EventHandler<FrameLoadStartEventArgs>(Browser_FrameLoadStart); // 网页加载
browser.FrameLoadEnd += new EventHandler<FrameLoadEndEventArgs>(FrameEndFunc); //网页加载完成
// 将其添加到表单并填充到表单窗口.
this.Controls.Add(browser);
browser.Dock = DockStyle.Fill;
}
#region 设置(web控件)加载动画
private void Browser_FrameLoadStart(object sender, FrameLoadStartEventArgs e)
{
Loading_Show();
}
private delegate void dlgLoading_Show();
private void Loading_Show()
{
if (lab_loading.InvokeRequired)
{
dlgLoading_Show dlShow = new dlgLoading_Show(Loading_Show);
lab_loading.Invoke(dlShow, null);
}
else
{
this.lab_loading.Visible = true;
}
}
private delegate void dlgLoading_Hide();
private void Loading_Hide()
{
if (lab_loading.InvokeRequired)
{
dlgLoading_Show dlHide = new dlgLoading_Show(Loading_Hide);
lab_loading.Invoke(dlHide, null);
}
else
{
this.lab_loading.Visible = false;
}
}
private void FrameEndFunc(object sender, FrameLoadEndEventArgs e)
{
Loading_Hide();
}
#endregion
}
}
MenuHandler (禁用右键菜单)
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;
}
}
LifeSpanHandler (禁用新弹窗)
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)
{
}
}
CEFKeyBoardHander (捕获按键,包括F12调出控制台调试、F5刷新)
/// <summary>
/// 监听按键
/// </summary>
public class CEFKeyBoardHander : IKeyboardHandler
{
public bool OnKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey)
{
if (type == KeyType.KeyUp && Enum.IsDefined(typeof(Keys), windowsKeyCode))
{
var key = (Keys)windowsKeyCode;
switch (key)
{
case Keys.F12:
browser.ShowDevTools();
break;
case Keys.F5:
if (modifiers == CefEventFlags.ControlDown)
{
//ctrl+f5
browser.Reload(true);
}
else
{
//f5
browser.Reload();
}
break;
}
}
return false;
}
public bool OnPreKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey, ref bool isKeyboardShortcut)
{
return false;
}
}