有一个winform项目,需要借助一个web项目来显示,并且对web做一些操作,web页目是需要用谷歌内核,基于谷歌 Chromium项目的开源Web Browser控件来开发写了一个demo。
安装步骤
第一步:右键项目,点击 管理NuGet程序包 , 输入Cefsharp 关键字搜索, 选择 CefSharp.WinForms 进行安装
安装完后,以packages.config中可以看到如下信息
第二步:修改配置管理器,将平台修改为X86或X64,Cef有32和64位之分
在 活动方案解决平台 下拉,点击新建
选择 X86 ,点击确定,接着关闭即可
第三步:编写代码,初始化浏览器
using CefSharp.WinForms;
using CefSharp;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WebApp
{
public partial class Form1 : Form
{
private ChromiumWebBrowser browser;
public Form1()
{
InitializeComponent();
//窗口最大化
this.WindowState = FormWindowState.Maximized;
//窗口全屏
//this.FormBorderStyle = FormBorderStyle.None;
}
private void Form1_Load(object sender, EventArgs e)
{
// 初始化浏览器
InitializeChromium();
}
private void InitializeChromium()
{
string website = "http://www.baidu.com";
CefSettings settings = new CefSettings();
settings.IgnoreCertificateErrors = true;
Cef.Initialize(settings);
//创建实例
browser = new ChromiumWebBrowser(website);
this.Controls.Add(browser);
}
}
}
最终启动程序,成功访问百度
常见疑问
右键菜单如何禁用?
建立MenuHandler类,继承cef中的IContextMenuHandler,并且实现他的接口
public class MenuHandler : IContextMenuHandler
{
void CefSharp.IContextMenuHandler.OnBeforeContextMenu(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.IMenuModel model)
{
model.Clear();
}
bool CefSharp.IContextMenuHandler.OnContextMenuCommand(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.CefMenuCommand commandId, CefSharp.CefEventFlags eventFlags)
{
//throw new NotImplementedException();
return false;
}
void CefSharp.IContextMenuHandler.OnContextMenuDismissed(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame)
{
//throw new NotImplementedException();
}
bool CefSharp.IContextMenuHandler.RunContextMenu(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.IMenuModel model, CefSharp.IRunContextMenuCallback callback)
{
return false;
}
}
设置ChromiumWebBrowser的 MenuHandler属性即可
browser.MenuHandler = new MenuHandler(); //禁用右键菜单
如何添加页面加载完成回调事件?
设置ChromiumWebBrowser的 FrameLoadEnd 属性
private void InitializeChromium()
{
string website = "http://www.baidu.com";
CefSettings settings = new CefSettings();
settings.IgnoreCertificateErrors = true;
Cef.Initialize(settings);
//创建实例
browser = new ChromiumWebBrowser(website);
//禁用右键菜单
//browser.MenuHandler = new MenuHandler();
//页面加载完成事件
browser.FrameLoadEnd += webview_FrameLoadEnd;
this.Controls.Add(browser);
}
private void webview_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
{
}
浏览器中的 js如何回调到 winform窗体中?
初始化chromeBrowser对象时,需要事先注册好回调方法
browser.RegisterJsObject("boundAsync", new BoundObject());
事先建立一个类,专门用来放需要回调的方法
public class BoundObject
{
// 这里定义从JavaScript调用的方法
public void OnKeyDown()
{
Application.Exit();
}
public void opencmd()
{
MessageBox.Show("JS回调");
}
}
结尾:样例小程序二维码,自己做的一个免费好用的排班小程序