大家在开发WPF客户端程序的时候,涉及到浏览器的话无非就用两种:首先想到的是微软自带的WebBrowser,但是往往用自带的东西就会问题一大堆:
(1)WebBrowser控件无法保证版本的一致,如果你在XP下,那么你就有可能调用IE6.0的版本,请问在HTML5流行的今天,IE6.0能做什么。同时在Window7或者更高的系统版本下WebBrowser调用的版本也可能与本机版本不一致。
(2)HTML页面兼容性问题,不同的浏览器对同一个页面的解释上会有页面的兼容问题。
(3)可控性。.net下的WebBrowser虽然提供很多的接口,来控制WebBrowser里的HTML,但是如果你用WebBrowser开发B/S与C/S混合软件呢?比如过用WebBrowser开发一个HTML控件你将有更多兼容性的问题,可控制的问题。
辣么多的问题我还是找个开源的吧,放弃它!
cefsharp:
一个开源的基于Chromium内核开发的适用WPF的浏览器,用了一段时间蛮不错的,但是在用的过程中发现了一个问题,不支持中文输入,通过github论坛发现还真有人提出这个Bug,但是都没有给出解决方案,然而并不能放弃,经过长时间的资料查找终于找到了解决办法,和大家一起分享:
需要重写ChromiumWebBrowser这个类中的OnPreviewTextInput这个方法,代码如下:
protected override void OnPreviewTextInput(TextCompositionEventArgs e)
{
if (!string.IsNullOrEmpty(e.Text) && e.Text.Length > 0)
{
for (int i = 0; i < e.Text.Length; i++)
{
managedCefBrowserAdapter.SendKeyEvent((int)WM.CHAR, (int)e.Text[i], ((IntPtr)0).CastToInt32());
//browser.GetHost().SendKeyEvent((int)WM.CHAR, (int)e.Text[i], ((IntPtr)0).CastToInt32());
}
e.Handled = true;
}
}