wine适配cefsharp时中文输入法无效问题分析与排查

4 篇文章 0 订阅
3 篇文章 0 订阅

项目场景:

软件采用WPF+CefSharp.Wpf.HwndHost方案显示H5页面,现在需要将这一套方案通过wine适配到Linux系统中


问题描述

在H5页面的输入框中输入中文时,能够调出中文输入法,但是中文输入完成后没有内容显示。

发现1:

在通过细节分析发现,问题时出在焦点上,中文输入后,内容输入到了原生的其它输入框中
在这里插入图片描述

发现2:

通过链接调用cef原生窗口时,中文输入法没有问题

原因分析:

这里猜测是wine在适配中H5焦点没有正确推动到系统,系统输入法实际没有获取到当前的焦点窗口

解决方案:

方案很简单,设置MultiThreadedMessageLoop=false
CefSharp.WinForms,CefSharp.WPF,CefSharp.Wpf.HwndHost的处理方法都比较类似,可自行百度搜索,这里列出CefSharp.WinForms的处理方法:

    internal static class Program
    {
        /// <summary>
        ///  The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            var settings = new CefSettings();
            settings.IgnoreCertificateErrors = true;
            settings.MultiThreadedMessageLoop = false;
            Cef.Initialize(settings);
            //这个必须
            Application.Idle += Application_Idle;
            Application.Run(new Form1());
        }

        private static void Application_Idle(object sender, EventArgs e)
        {
            Cef.DoMessageLoopWork();
        }
    }

源码

1. 顶部下载

2. github地址

https://github.com/sczmzx/wine.git

遗留问题

目前还发现wine中中文输入时,输入法的输入框不更随,暂时没有找到解决办法,如果大家知道怎么处理,欢迎给我留言

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值