很多做过混合客户端开发的人应该都熟悉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),无论怎么调用都不生效,改成小写后一切正常。
标签:webView2HostObject,cefsharp,调用,遇到,C#,JS,使用,public From: https://www.cnblogs.com/zfsn2021/p/17390963.html