记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),无论怎么调用都不生效,改成小写后一切正常。

posted @   追风少年2021  阅读(285)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示