public static int Main(string[] args) { const bool simpleSubProcess = false; Cef.EnableHighDPISupport(); string externalDomain = "http://10.0.106.33:8081"; //NOTE: Using a simple sub processes uses your existing application executable to spawn instances of the sub process. //Features like JSB, EvaluateScriptAsync, custom schemes require the CefSharp.BrowserSubprocess to function if (simpleSubProcess) { var exitCode = Cef.ExecuteProcess(); if (exitCode >= 0) { return(exitCode); } #if DEBUG if (!System.Diagnostics.Debugger.IsAttached) { MessageBox.Show("When running this Example outside of Visual Studio" + "please make sure you compile in `Release` mode.", "Warning"); } #endif var settings = new CefSettings(); settings.BrowserSubprocessPath = "AgileBrowser.WinForms.exe"; Cef.Initialize(settings); var browser = new SimpleBrowserForm(externalDomain); Application.Run(browser); } else { #if DEBUG if (!System.Diagnostics.Debugger.IsAttached) { MessageBox.Show("When running this Example outside of Visual Studio" + "please make sure you compile in `Release` mode.", "Warning"); } #endif const bool multiThreadedMessageLoop = true; var browser = new BrowserForm(multiThreadedMessageLoop, externalDomain); //var browser = new SimpBrowserForm(externalDomain); //var browser = new TabulationDemoForm(externalDomain); IBrowserProcessHandler browserProcessHandler; if (multiThreadedMessageLoop) { browserProcessHandler = new BrowserProcessHandler(); } else { //Get the current taskScheduler (must be called after the form is created) var scheduler = TaskScheduler.FromCurrentSynchronizationContext(); browserProcessHandler = new WinFormsBrowserProcessHandler(scheduler); } AgileBrowser.Init(osr: false, multiThreadedMessageLoop: multiThreadedMessageLoop, browserProcessHandler: browserProcessHandler, externalDomain: externalDomain); Application.Run(browser); } return(0); }
public BrowserTabUserControl(Action <string, int?> openNewTab, string url, bool multiThreadedMessageLoopEnabled, string externalDomain) { InitializeComponent(); var browser = new ChromiumWebBrowser(url) { Dock = DockStyle.Fill }; browserPanel.Controls.Add(browser); Browser = browser; browser.MenuHandler = new MenuHandler(); browser.RequestHandler = new WinFormsRequestHandler(openNewTab, externalDomain); browser.JsDialogHandler = new JsDialogHandler(); browser.DownloadHandler = new DownloadHandler(); if (multiThreadedMessageLoopEnabled) { browser.KeyboardHandler = new KeyboardHandler(); } //browser.LifeSpanHandler = new LifeSpanHandler(); browser.LoadingStateChanged += OnBrowserLoadingStateChanged; browser.ConsoleMessage += OnBrowserConsoleMessage; browser.TitleChanged += OnBrowserTitleChanged; browser.AddressChanged += OnBrowserAddressChanged; browser.StatusMessage += OnBrowserStatusMessage; browser.IsBrowserInitializedChanged += OnIsBrowserInitializedChanged; browser.LoadError += OnLoadError; browser.JavascriptObjectRepository.Register("bound", new BoundObject(), isAsync: false, options: BindingOptions.DefaultBinder); browser.JavascriptObjectRepository.Register("boundAsync", new AsyncBoundObject(), isAsync: true, options: BindingOptions.DefaultBinder); //If you call CefSharp.BindObjectAsync in javascript and pass in the name of an object which is not yet //bound, then ResolveObject will be called, you can then register it browser.JavascriptObjectRepository.ResolveObject += (sender, e) => { var repo = e.ObjectRepository; if (e.ObjectName == "boundAsync2") { repo.Register("boundAsync2", new AsyncBoundObject(), isAsync: true, options: BindingOptions.DefaultBinder); } }; browser.RenderProcessMessageHandler = new RenderProcessMessageHandler(); browser.DisplayHandler = new DisplayHandler(); //browser.MouseDown += OnBrowserMouseClick; browser.HandleCreated += OnBrowserHandleCreated; //browser.ResourceHandlerFactory = new FlashResourceHandlerFactory(); this.multiThreadedMessageLoopEnabled = multiThreadedMessageLoopEnabled; var eventObject = new ScriptedMethodsBoundObject(); eventObject.EventArrived += OnJavascriptEventArrived; // Use the default of camelCaseJavascriptNames // .Net methods starting with a capitol will be translated to starting with a lower case letter when called from js browser.JavascriptObjectRepository.Register("boundEvent", eventObject, isAsync: false, options: BindingOptions.DefaultBinder); AgileBrowser.RegisterTestResources(browser); var version = String.Format("Chromium: {0}, CEF: {1}, CefSharp: {2}", Cef.ChromiumVersion, Cef.CefVersion, Cef.CefSharpVersion); DisplayOutput(version); }