1.背景
WinForm .net4.0項目要求嵌入瀏覽器,VS2015自帶得WebBrowser再打開第三方提供得網頁時會報錯。
2.解決方案:
嵌入谷歌瀏覽器,使用CefSharp插件。
3.操作方法:
下載CefSharp插件:
注意:.net4.0平台下需要使用49.0.0版本得CefSharp插件。
下載過程:
① 打開VS2015;
② 選中需要安裝CefSharp插件的項目;
③ 單擊鼠標右鍵選擇管理NuGet程序包;
④ 選擇瀏覽選項,再搜索處輸入CefSharp.WinForms搜索;
⑤ 選擇CefSharp.WinForms,再右側的版本選擇49.0.0;
⑥ 點擊安裝;
代碼:
① 添加一個工具類,單例模式
public class CefUtils { private static ChromiumWebBrowser chromeBrowser = null; /// <summary> /// 單例 /// </summary> private static CefUtils instance = null; /// <summary> /// 單例模式 /// </summary> /// <returns>實例</returns> public static CefUtils Instance() { if (instance == null) { instance = new CefUtils(); } return instance; } public ChromiumWebBrowser GetWebBrow(string path) { try { chromeBrowser = GetWebBrowser(path); } catch (Exception ex) { LogUtil.Error(ex); } return chromeBrowser; } /// <summary> /// 設置WebBrowser屬性 /// </summary> /// <returns></returns> private ChromiumWebBrowser GetWebBrowser(string path) { CefSettings settings = CefSets(); if (!Cef.IsInitialized && !Cef.Initialize(settings)) { throw new InvalidOperationException("Cef::Initialize() failed"); } ChromiumWebBrowser chromeBrowser = new ChromiumWebBrowser(path); BrowserSettings browserSettings = new BrowserSettings(); browserSettings.FileAccessFromFileUrls = CefState.Enabled; browserSettings.UniversalAccessFromFileUrls = CefState.Enabled; chromeBrowser.BrowserSettings = browserSettings; return chromeBrowser; } /// <summary> /// 設置瀏覽器屬性 /// </summary> /// <returns></returns> private static CefSettings CefSets() { CefSettings settings = new CefSettings(); settings.CefCommandLineArgs.Add("MultiThreadedMessageLoop", "false"); settings.CefCommandLineArgs.Add("LogFile", GetPath("CefGlue.log")); settings.CefCommandLineArgs.Add("Locale", "zh_CN"); settings.CefCommandLineArgs.Add("LocalesDirPath", GetPath("locales")); settings.CefCommandLineArgs.Add("WindowlessRenderingEnabled", "true"); //緩存路徑 settings.CachePath = GetPath("BrowserCache"); //執行加載插件命令 settings.CefCommandLineArgs.Add("debug-plugin-loading", "1"); settings.CefCommandLineArgs.Add("allow-outdated-plugins", "1"); settings.CefCommandLineArgs.Add("always-authorize-plugins", "1"); settings.CefCommandLineArgs.Add("disable-web-security", "1"); settings.CefCommandLineArgs.Add("enable-npapi", "1"); settings.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36";//瀏覽器內核 settings.Locale = "zh-CN"; return settings; } /// <summary> /// 獲取路徑 /// </summary> /// <param name="v"></param> /// <returns></returns> private static string GetPath(string v) { return Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, v)); } }
② 調用
/// <summary> /// 加載網頁 /// </summary> private void loadweb(string url) { this.Controls.Clear(); //實例化控件 ChromiumWebBrowser wb = CefUtils.Instance().GetWebBrow(url); //設置停靠方式 wb.Dock = DockStyle.Fill; //加入到當前窗體中 this.Controls.Add(wb); }
完成。