大家在開發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; } }