项目场景:
软件采用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中中文输入时,输入法的输入框不更随,暂时没有找到解决办法,如果大家知道怎么处理,欢迎给我留言