新建工程
使用vs2022新建一个winform工程
框架选:.NET Framework 4.7.2
建立运行环境
点击上面,选【配置管理器】
点击下拉选新建
安装包
使用nuget安装包:
代码
public partial class Form1 : Form
{
public ChromiumWebBrowser browser = null;
private MyLoadHandler myLoadHandler = null;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//设置
var settings = new CefSettings();
settings.Locale = "zh-CN";
settings.CefCommandLineArgs.Add("disable-gpu", "1");//去掉gpu,否则chrome显示有问题
Cef.Initialize(settings);
//浏览器对象
string url = "https://www.taobao.com/";
//string url = "https://www.baidu.com/";
browser = new ChromiumWebBrowser(url);
//调用的c#类
browser.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true;
CefSharpSettings.WcfEnabled = true;
browser.JavascriptObjectRepository.Register("csClass", new CsClass(), isAsync: false, options: BindingOptions.DefaultBinder);
//加入容器
this.Controls.Add(browser);
browser.Dock = DockStyle.Fill;
//高分辨率
//Cef.EnableHighDPISupport();
//设置LifeSpanHandler,不弹出新窗体
browser.LifeSpanHandler = new LifeSpanHandler();
//改变网址事件
browser.AddressChanged += Browser_AddressChanged;
//装入处理器
myLoadHandler = new MyLoadHandler(this);
browser.LoadHandler = myLoadHandler;
//装入完成事件
browser.FrameLoadEnd += Browser_FrameLoadEnd;
//消息接收事件
browser.JavascriptMessageReceived += Browser_JavascriptMessageReceived;
}
private void Browser_JavascriptMessageReceived(object sender, JavascriptMessageReceivedEventArgs e)
{
//throw new NotImplementedException();
}
private void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
{
//throw new NotImplementedException();
browser.ExecuteScriptAsync(@"
//调用c#方法
csClass.show();
");
}
private void Browser_AddressChanged(object sender, AddressChangedEventArgs e)
{
//throw new NotImplementedException();
}
private void button1_Click(object sender, EventArgs e)
{
//打开网址
browser.LoadUrl("http://www.baidu.com");
//browser.ExecuteScriptAsync("alert('hello,注入网页')");
}
}
internal class CsClass
{
public CsClass()
{
}
public void show()
{
MessageBox.Show("hello,测试");
}
}
class MyLoadHandler : ILoadHandler
{
private Form1 form1;
public MyLoadHandler(Form1 form1)
{
this.form1 = form1;
}
public void OnFrameLoadEnd(IWebBrowser chromiumWebBrowser, FrameLoadEndEventArgs frameLoadEndArgs)
{
//throw new NotImplementedException();
string address = form1.browser.Address;
if (address.Contains("baidu"))
{
this.form1.browser.ExecuteScriptAsync(@"
var kw=document.getElementById('kw');
kw.value='这是我注入的信息';
");
}
}
public void OnFrameLoadStart(IWebBrowser chromiumWebBrowser, FrameLoadStartEventArgs frameLoadStartArgs)
{
//throw new NotImplementedException();
}
public void OnLoadError(IWebBrowser chromiumWebBrowser, LoadErrorEventArgs loadErrorArgs)
{
//throw new NotImplementedException();
}
public void OnLoadingStateChange(IWebBrowser chromiumWebBrowser, LoadingStateChangedEventArgs loadingStateChangedArgs)
{
//throw new NotImplementedException();
}
}