CefShape Demo
2017-10-25

0X1 简介

CefSharp 是C#平台下CEF的移植,让Chromium在你的winform或WPF里面跑起来,以下CefSharp版本号为CefSharp47

0X2 链接文档与演示

0X3 全局设置

CefSettings setting = new CefSharp.CefSettings();
// 设置语言
setting.Locale = "zh-CN";
setting.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64)";
//缓存路径
setting.CachePath = AppDomain.CurrentDomain.BaseDirectory + "cache//";
setting.PersistSessionCookies = false;
CefSharp.Cef.Initialize(setting, true, false);
//cookie保存路径
string cookieDirec = AppDomain.CurrentDomain.BaseDirectory + "cache//cookie//";
//如果需要缓存Cookie不要后面这句
if (Directory.Exists(cookieDirec)) Directory.Delete(cookieDirec, true);
ICookieManager cookieManager = CefSharp.Cef.GetGlobalCookieManager();
cookieManager.SetStoragePath(cookieDirec, false);

0X4 弹出窗口问题

  1. 重写IRequestHandler类 重写OnBeforeResourceLoad方法
    ChromiumWebBrowser cef = null;
    

//传入主窗体 public void Load(ref ChromiumWebBrowser browser) { cef = browser; }

CefReturnValue IRequestHandler.OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback) { var frm = cef.GetBrowser().MainFrame; var req = frm.CreateRequest(true); if (request.PostData != null && request.PostData.Elements != null) foreach (var item in request.PostData.Elements) req.PostData.AddElement(item); req.Method = request.Method; req.SetReferrer(request.ReferrerUrl, request.ReferrerPolicy); req.Url = request.Url; frm.LoadRequest(req); return CefReturnValue.Cancel; }


2.重写ILifeSpanHandler 重写OnBeforePopup方法

ChromiumWebBrowser cef = null;

//传入主窗体 public void Load(ref ChromiumWebBrowser browser) { cef = browser; } public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IWindowInfo windowInfo, ref bool noJavascriptAccess, out IWebBrowser newBrowser) { newBrowser = null; var wbHide = new ChromiumWebBrowser("about:blank"); var handler= new YsRequestHandler(); handler.Load(ref cef); wbHide.RequestHandler = handler; newBrowser = wbHide; return false;//{false:允许新窗口,true:禁止新窗口}
}


3.加载ILifeSpanHandler

wb = new ChromiumWebBrowser("about:blank"); var handler = new YsLifeSpanHandler(); handler.Load(ref wb); wb.LifeSpanHandler = handler; wb.Dock = DockStyle.Fill; frm.Controls.Add(wb);


## 0X5 禁用右键菜单
重写 IContextMenuHandler

public bool RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback) { return true; }

```

0X6 使用Cefshape

参考DEMO GitHub Lozye