using System; using System.Diagnostics; using System.Text; using CefSharp.Example.Proxy; namespace CefSharp.Example { public static class CefExample { public const string DefaultUrl = "custom://cefsharp/home.html"; public const string BindingTestUrl = "custom://cefsharp/BindingTest.html"; public const string TestResourceUrl = "http://test/resource/load"; public const string TestUnicodeResourceUrl = "http://test/resource/loadUnicode"; // Use when debugging the actual SubProcess, to make breakpoints etc. inside that project work. private static readonly bool DebuggingSubProcess = Debugger.IsAttached; public static void Init() { // Set Google API keys, used for Geolocation requests sans GPS. See http://www.chromium.org/developers/how-tos/api-keys // Environment.SetEnvironmentVariable("GOOGLE_API_KEY", ""); // Environment.SetEnvironmentVariable("GOOGLE_DEFAULT_CLIENT_ID", ""); // Environment.SetEnvironmentVariable("GOOGLE_DEFAULT_CLIENT_SECRET", ""); //Chromium Command Line args //http://peter.sh/experiments/chromium-command-line-switches/ //NOTE: Not all relevant in relation to `CefSharp`, use for reference purposes only. var settings = new CefSettings(); settings.RemoteDebuggingPort = 8088; //This will disable WCF (Effectively disabling JavascriptBinding and EvaluateScriptAsync) //CefSharpSettings.WcfEnabled = false; //The location where cache data will be stored on disk. If empty an in-memory cache will be used for some features and a temporary disk cache for others. //HTML5 databases such as localStorage will only persist across sessions if a cache path is specified. settings.CachePath = "cache"; //settings.UserAgent = "CefSharp Browser" + Cef.CefSharpVersion; // Example User Agent //settings.CefCommandLineArgs.Add("renderer-process-limit", "1"); //settings.CefCommandLineArgs.Add("renderer-startup-dialog", "1"); //settings.CefCommandLineArgs.Add("disable-gpu", "1"); //settings.CefCommandLineArgs.Add("disable-gpu-vsync", "1"); //settings.CefCommandLineArgs.Add("enable-media-stream", "1"); //Enable WebRTC //settings.CefCommandLineArgs.Add("no-proxy-server", "1"); //Don't use a proxy server, always make direct connections. Overrides any other proxy server flags that are passed. //settings.CefCommandLineArgs.Add("debug-plugin-loading", "1"); //Dumps extra logging about plugin loading to the log file. //settings.CefCommandLineArgs.Add("disable-plugins-discovery", "1"); //Disable discovering third-party plugins. Effectively loading only ones shipped with the browser plus third-party ones as specified by --extra-plugin-dir and --load-plugin switches //Disables the DirectWrite font rendering system on windows. //Possibly useful when experiencing blury fonts. //settings.CefCommandLineArgs.Add("disable-direct-write", "1"); var proxy = ProxyConfig.GetProxyInformation(); switch (proxy.AccessType) { case InternetOpenType.Direct: { //Don't use a proxy server, always make direct connections. settings.CefCommandLineArgs.Add("no-proxy-server", "1"); break; } case InternetOpenType.Proxy: { settings.CefCommandLineArgs.Add("proxy-server", proxy.ProxyAddress); break; } case InternetOpenType.PreConfig: { settings.CefCommandLineArgs.Add("proxy-auto-detect", "1"); break; } } settings.LogSeverity = LogSeverity.Verbose; if (DebuggingSubProcess) { var architecture = Environment.Is64BitProcess ? "x64" : "x86"; settings.BrowserSubprocessPath = "..\\..\\..\\..\\CefSharp.BrowserSubprocess\\bin\\" + architecture + "\\Debug\\CefSharp.BrowserSubprocess.exe"; } settings.RegisterScheme(new CefCustomScheme { SchemeName = CefSharpSchemeHandlerFactory.SchemeName, SchemeHandlerFactory = new CefSharpSchemeHandlerFactory() }); Cef.OnContextInitialized = delegate { Cef.SetCookiePath("cookies", true); }; if (!Cef.Initialize(settings, shutdownOnProcessExit: true, performDependencyCheck: !DebuggingSubProcess)) { throw new Exception("Unable to Initialize Cef"); } } public static async void RegisterTestResources(IWebBrowser browser) { var handler = browser.ResourceHandlerFactory as DefaultResourceHandlerFactory; if (handler != null) { const string responseBody = "
This document is loaded from a System.IO.Stream
"; var response = ResourceHandler.FromString(responseBody); response.Headers.Add("HeaderTest1", "HeaderTest1Value"); handler.RegisterHandler(TestResourceUrl, response); const string unicodeResponseBody = "整体满意度"; handler.RegisterHandler(TestUnicodeResourceUrl, ResourceHandler.FromString(unicodeResponseBody)); var plugins = await Cef.GetPlugins(); var pluginBody = new StringBuilder(); pluginBody.Append("| Name | "); pluginBody.Append("Description | "); pluginBody.Append("Version | "); pluginBody.Append("Path | "); pluginBody.Append("
|---|---|---|---|
| " + plugin.Name + " | "); pluginBody.Append("" + plugin.Description + " | "); pluginBody.Append("" + plugin.Version + " | "); pluginBody.Append("" + plugin.Path + " | "); pluginBody.Append("