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); }
完成。