/// <summary> /// 创建cef 打开的——blank实例 /// </summary> public static Task <CookiedCefBrowser> CreateNewWebBrowser() { //使用任务 锁保证事件变为同步 var tcs = new TaskCompletionSource <CookiedCefBrowser>(); // Instruct CEF to not render to a window at all. CefWindowInfo cefWindowInfo = CefWindowInfo.Create(); cefWindowInfo.SetAsWindowless(IntPtr.Zero, true); // Settings for the browser window itself (e.g. should JavaScript be enabled?). var cefBrowserSettings = new CefBrowserSettings(); // Initialize some the cust interactions with the browser process. // The browser window will be 1280 x 720 (pixels). var cefClient = new HeadLessCefClient(1, 1); var loader = cefClient.GetCurrentLoadHandler(); loader.BrowserCreated += (s, e) => { //事件通知 当cef browser 创建完毕 //创建完毕后 保存 browser 对象的实例 var brw = e.Browser; var etaoBrowser = new CookiedCefBrowser { CefBrowser = brw, CefLoader = loader, CefClient = cefClient }; tcs.TrySetResult(etaoBrowser); }; ////注册 加载完毕事件handler //loader.LoadEnd += this.OnWebBrowserLoadEnd; // Start up the browser instance. string url = "about:blank"; CefBrowserHost.CreateBrowser(cefWindowInfo, cefClient, cefBrowserSettings, url); return(tcs.Task); }
/// <summary> /// 创建cef,并 打开制定的网址 /// </summary> /// <param name="url"></param> /// <param name="handlerRequest"></param> /// <param name="timeOut"></param> /// <returns></returns> public static Task <CookiedCefBrowser> CreateNewWebBrowser(string url, EventHandler <LoadEndEventArgs> handlerRequest, int timeOut = 5000) { //验证是否是合法的URL var isUrl = InPutValidate.IsUrl(url); if (!isUrl) { return(Task.FromResult <CookiedCefBrowser>(null)); } //使用任务 锁保证事件变为同步 var tcs = new TaskCompletionSource <CookiedCefBrowser>(); // Instruct CEF to not render to a window at all. CefWindowInfo cefWindowInfo = CefWindowInfo.Create(); cefWindowInfo.SetAsWindowless(IntPtr.Zero, true); // Settings for the browser window itself (e.g. should JavaScript be enabled?). var cefBrowserSettings = new CefBrowserSettings(); // Initialize some the cust interactions with the browser process. // The browser window will be 1280 x 720 (pixels). var cefClient = new HeadLessCefClient(1, 1); var loader = cefClient.GetCurrentLoadHandler(); loader.BrowserCreated += (s, e) => { //事件通知 当cef browser 创建完毕 //创建完毕后 保存 browser 对象的实例 var brw = e.Browser; var etaoBrowser = new CookiedCefBrowser { CefBrowser = brw, CefLoader = loader, CefClient = cefClient }; tcs.TrySetResult(etaoBrowser); }; if (null != handlerRequest) { loader.LoadEnd += handlerRequest; } ////注册 加载完毕事件handler //loader.LoadEnd += this.OnWebBrowserLoadEnd; // Start up the browser instance. // string url = "about:blank"; CefBrowserHost.CreateBrowser(cefWindowInfo, cefClient, cefBrowserSettings, url); //设定超时 //超时监听 int timeoutMs = timeOut; var ctoken = new CancellationTokenSource(timeoutMs); ctoken.Token.Register(() => { var brw = loader.Browser; var etaoBrowser = new CookiedCefBrowser { CefBrowser = brw, CefLoader = loader, CefClient = cefClient }; //超时结果返回空 tcs.TrySetResult(etaoBrowser); //tcs.TrySetCanceled(); }, useSynchronizationContext: false); return(tcs.Task); }