记cefsharp使用中遇到的坑
很多做过混合客户端开发的人应该都熟悉cefsharp,同类的产品还有webview2,但是如果客户端是以管理员身份运行的,HTML元素 <input type="file">是不起作用的。
我一开始也是用的webview2,因为无法启用文件上传对话框,后来转到了cefsharp,然后遇到了一个小坑,在此记录一下。
JS调用C#的方法,无论C#端是大写字母开头还是小写字母开头,在JS调用的时候都要用小写的开头
C#代码:
/// <summary> /// 自定义宿主类,用于向网页注册C#对象,供JS调用 /// </summary> [ClassInterface(ClassInterfaceType.AutoDual)] [ComVisible(true)] public class WebView2HostObject { public event Action<string> CopyTextAndImageEvent; public void SendTextAndImage(string jsonStr) { CopyTextAndImageEvent?.Invoke(jsonStr); } }
JS代码:
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <title></title> <script> async function Test() { await CefSharp.BindObjectAsync('webView2HostObject'); webView2HostObject.sendTextAndImage("hello");//调用c#方法,方法的首字母要小写,无论c#那边是否大写 }; </script> </head> <body> <button onclick="Test()">测试</button> </body> </html>
在客户端程序启动时,向JS端注入了C#的对象 webView2HostObject
//向JS注入c#对象 webBrowser.JavascriptObjectRepository.Register("webView2HostObject", webView2HostObject, BindingOptions.DefaultBinder);
起初在前端界面调用C#方法使用的名字和C#端一样(SendTextAndImage),无论怎么调用都不生效,改成小写后一切正常。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~