CefSharp基本使用

安装#

创建Winforms项目,然后NuGet安装包:CefSharp.WinForms即可。

CefSharp.WinForms

基本使用#

//初始化浏览器并启动
public void InitializeChromium()
{
    //参数设置
    CefSettings settings = new CefSettings();
    Cef.Initialize(settings);
    
    //创建实例
    ChromeBrowser = new ChromiumWebBrowser("http://127.0.0.1:7703");

    //绑定对象进行映射到JS
    CefSharpSettings.WcfEnabled = true;
    this.ChromeBrowser.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true;
    this.ChromeBrowser.JavascriptObjectRepository.Register("TestObject", new TestObject(), isAsync: false, options: BindingOptions.DefaultBinder);
    //注意:对应到JS中的字段、方法的首写变成小写。但对象名仍是区分大小写的。

    //绑定F12键显示控制台
    this.ChromeBrowser.KeyboardHandler = new CEFKeyBoardHander();

    //添加控件
    this.Controls.Add(ChromeBrowser);
    this.ChromeBrowser.Dock = DockStyle.Fill;
}

配置F12显示控制台#

创建CEFKeyBoardHander类型,用于扩展按键监听

using CefSharp;
using System;
using System.Windows.Forms;

namespace Test
{
    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;
        }
    }
}

然后绑定F12键显示控制台即可。

//绑定F12键显示控制台
this.ChromeBrowser.KeyboardHandler = new CEFKeyBoardHander();

//记得在显示之前
//添加控件
this.Controls.Add(ChromeBrowser);
this.ChromeBrowser.Dock = DockStyle.Fill;

配置C#调用JS#

无返回值的JS调用

this.ChromeBrowser.ExecuteScriptAsync("window.pandaBridge(123);");

有返回值的JS调用

Task<CefSharp.JavascriptResponse> t = this.ChromeBrowser.EvaluateScriptAsync("window.pandaBridge(123);");
// 等待js 方法执行完后,获取返回值
t.Wait();
// t.Result 是 CefSharp.JavascriptResponse 对象
// t.Result.Result 是一个 object 对象,来自js的 callTest2() 方法的返回值
if (t.Result.Result != null)
{
    MessageBox.Show(t.Result.Result.ToString());
}

配置JS调用C##

创建一个用于调用的C#类型。

using System.Windows.Forms;

namespace Test
{
    public class TestObject
    {
        public string MessageText = string.Empty;
        public void ShowTest(string abc)
        {
            MessageBox.Show("this in C#.\n\r" + abc);
        }
    }
}

然后配置绑定。(一定要在控件添加到界面前绑定)

//绑定对象进行映射到JS
CefSharpSettings.WcfEnabled = true;
this.ChromeBrowser.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true;
this.ChromeBrowser.JavascriptObjectRepository.Register("TestObject", new TestObject(), isAsync: false, options: BindingOptions.DefaultBinder);
//注意:对应到JS中的字段、方法的首写变成小写。但对象名仍是区分大小写的。

然后JS调用

TestObject.showTest("123");

参考链接#

https://www.jianshu.com/p/36022758f79c
https://www.cnblogs.com/mq0036/p/11063202.html
https://www.cnblogs.com/xuejianxiyang/p/9981398.html

作者:重庆熊猫

出处:https://www.cnblogs.com/cqpanda/p/16879255.html

版权:本作品采用「不论是否商业使用都不允许转载,否则按3元1字进行收取费用」许可协议进行许可。

posted @   重庆熊猫  阅读(1750)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示