C#嵌入Chrome浏览器、F12打开DevTools控制台、js和c#方法互相调用、判断html是否页面加载完成

安装cefsharp
CefSharp中文帮助文档

使用NuGet搜索CefSharp然后下载CefSharp.WinForms
将平台换为X86或者X64,Any Cpu无法编译成功
实例化浏览器
settings中有一些查用配置
settings.CefCommandLineArgs.Add("–disable-web-security",“1”);//关闭同源策略,允许跨域
settings.CefCommandLineArgs.Add(“ppapi-flash-version”, “18.0.0.209”);//PepperFlash\manifest.json中的version
settings.CefCommandLineArgs.Add(“ppapi-flash-path”, “PepperFlash\pepflashplayer.dll”);
settings.CefCommandLineArgs.Add("–enable-system-flash", “1”);//使用系统flash
settings.CefCommandLineArgs.Add(“disable-gpu”, “1”);//去掉gpu,否则chrome显示有问题
settings.CefCommandLineArgs.Add(“proxy-auto-detect”, “0”); //去掉代理,增加加载网页速度
settings.CefCommandLineArgs.Add(“no-proxy-serve”, “1”); //去掉代理,增加加载网页速度
以上设置未测试是否可行

public partial class FrmMain : Form
{
ChromiumWebBrowser bs;
public FrmMain()
{
InitializeComponent();
}

private void FrmMain_Load(object sender, EventArgs e)
{
//实例化浏览器
var settings = new CefSettings
{
Locale = "zh-CN"
};
Cef.Initialize(settings);
bs = new ChromiumWebBrowser("https://www.baidu.com/")
{
// 填充整个父控件
Dock = DockStyle.Fill,
//响应按键
KeyboardHandler = new CEFKeyBoardHander()
};
// 添加到窗口的控件列表中bs
panel1.Controls.Add(bs);
}

private void FrmMain_FormClosed(object sender, FormClosedEventArgs e)
{
// 结束时要销毁
bs.Dispose();
bs = null;
Cef.Shutdown();
}
}

响应F12打开控制台console
在ChromiumWebBrowser中添加KeyboardHandler属性响应按键

//响应按键
KeyboardHandler = new CEFKeyBoardHander()
//...

public class CEFKeyBoardHander : IKeyboardHandler
{
public bool OnKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey)
{
if (type == KeyType.KeyUp && Enum.IsDefined(typeof(Keys), windowsKeyCode))
{
var key = (Keys)windowsKeyCode;
switch (key)
{
case Keys.F12:
browser.ShowDevTools();
break;

case Keys.F5:

if (modifiers == CefEventFlags.ControlDown)
{
//MessageBox.Show("ctrl+f5");
browser.Reload(true); //强制忽略缓存

}
else
{
//MessageBox.Show("f5");
browser.Reload();
}
break;


}
}
return false;
}

public bool OnPreKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey, ref bool isKeyboardShortcut)
{
return false;
}
}

c#调用js方法
仅需一行代码就可以

bs.ExecuteScriptAsync("$('#su').val('c#调用js');");
1


js调用c#方法
1、将c#对象注册为 js对象
设置CefSharpSettings.LegacyJavascriptBindingEnabled = true 这一行要放在第一次初始化Cef的下面
将c#对象注册为 js对象RegisterJsObject

private void FrmMain_Load(object sender, EventArgs e)
{
//实例化浏览器
var settings = new CefSettings
{
Locale = "zh-CN"
};
Cef.Initialize(settings);
CefSharpSettings.LegacyJavascriptBindingEnabled = true;

bs = new ChromiumWebBrowser("https://www.baidu.com/")
{
// 填充整个父控件
Dock = DockStyle.Fill,
//响应按键
KeyboardHandler = new CEFKeyBoardHander()
};
//将c#对象注册为 js对象
bs.RegisterJsObject("jsObj", new JsEvent(), new BindingOptions() { CamelCaseJavascriptNames = false });
// 添加到窗口的控件列表中bs
panel1.Controls.Add(bs);
}

public class JsEvent
{

public void ShowTest(string msg)
{
MessageBox.Show("this in C#.\n\r" + msg);
}
}

2、js调用注册的c#对象
jsObj.ShowTest("hello");


判断html是否页面加载完成
让你的chrome控制台完全支持jQuery语法

/**
* 注意:1.https页面引用的cdn也必须是https的
* 2.每个页面是独立的,添加的代码只对当前页有作用,刷新后也必须重新输入代码
* 国内CDN平台推荐:https://www.bootcdn.cn/jquery/
*/

// http页面先在控制台写如下代码
;(function(d,s){d.body.appendChild(s=d.createElement('script')).src='http://cdn.bootcss.com/jquery/1.11.0/jquery.min.js'})(document);

// https页面先在控制台写如下代码
;(function(d,s){d.body.appendChild(s=d.createElement('script')).src='https://cdn.bootcss.com/jquery/1.11.0/jquery.min.js'})(document);

//某些网站仅支持指定域名,比如掘金指定百度等域名。就可以使用百度的cdn。
;(function(d,s{d.body.appendChild(s=d.createElement('script')).src='https://libs.baidu.com/jquery/2.0.0/jquery.min.js'})(document);

同理,调用c#执行代码,就可以让没有jQuery的远程页面支持jQuery
//这行代码放在panel1.Controls.Add(bs);下面
bs.FrameLoadEnd += Bs_FrameLoadEnd;


private void Bs_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
{
if (e.Frame.IsMain) //判断网页是否加载完成
{
//c#执行js代码
e.Frame.ExecuteJavaScriptAsync(";(function(d,s){d.body.appendChild(s=d.createElement('script')).src='https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js'})(document);");

链接:使用CefSharp在C#嵌入Chrome浏览器使用方法、F12打开DevTools控制台、js和c#方法互相调用、判断html是否页面加载完成_似海星空的博客-CSDN博客_cefsharp 允许跨域

posted @   Tozhang  阅读(2255)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示