Опции для встраивания Chromium вместо IE WebBrowser с WPF/С#
Элемент управления WPF WebBrowser на основе Internet Explorer страдает некоторыми проблемами клавиатуры и фокуса и проблемами с утечкой памяти. В качестве альтернативного решения этих проблем мы рассматриваем доступные варианты размещения Chromium вместо управления WebBrowser в нашем проекте WPF/С#, основанном на редактировании HTML. Аналогичные вопросы были здесь. Я прочитал ответы и провел собственное исследование, , но я надеюсь получить дополнительную обратную связь от людей, которые действительно использовали любой из следующих вариантов в проектах качества производства:
Awesomium и Awesomium.NET
Это выглядит очень уместно, но мне не нравится тот факт, что проект не является открытым исходным кодом, а полный источник недоступен. Кроме того, это может быть излишним для нашего проекта, поскольку визуализация без экрана не является чем-то, от чего мы действительно зависим.
Chromium Embedded Framework (CEF) и .NET привязки для CEF
Вероятно, это лучший вариант. Проект кажется живым и активным, в настоящее время синхронизируется с Chrome v27. CEF3 использует многопроцессорную архитектуру Chrome. Также похоже, что Adobe предоставляет некоторое одобрение.
Google Chrome Frame
В то время как первоначальной целью было быть плагин HTML5 для IE и Firefox, он фактически также работает как автономный элемент управления ActiveX, поэтому я могу его обернуть для использования с WPF. Он предоставляет достаточный API для взаимодействия с внутренней веб-страницей (onmessage, addEventListener/removeEventListener, postMessage
).
Я знаю, что Google - прекратить Chrome Frame, но я полагаю, что источники останутся в репозитории Chromium. Не составит труда обновить его с помощью последнего кода Chromium, поскольку мы будем иметь полный контроль над этим.
оболочка WebKit.NET
Не точно Chromium-based и не использует V8-движок, поэтому на самом деле это не вариант.
Есть ли другой вариант, который я мог бы упустить?
Я был бы очень признателен, если бы кто-то поделился своим опытом с любым из вышеперечисленных вариантов реалистичного проекта WPF в сфере производства. Были ли у вас какие-либо последствия интеграции, лицензирования или развертывания? Спасибо.
[EDITED]
Я также хотел бы поблагодарить artlung за то, что вы дали этому вопросу толчок, предложив щедрое предложение щедрости.
Ответы
Ответ 1
Вы уже перечислили наиболее заметные решения для встраивания Chromium (CEF, Chrome Frame, Awesomium). Больше нет проектов, которые имеют значение.
Есть еще проект Berkelium (см. Berkelium Sharp и Berkelium Managed), но он воплощает старую версию Chromium.
CEF - ваш лучший выбор - он полностью открыт и часто обновляется. Это единственный вариант, который позволяет встроить последнюю версию Chromium. Теперь, когда Пер Лундберг активно работает над переносом CEF 3 на CefSharp, это лучший вариант на будущее. Существует также Xilium.CefGlue, но этот предоставляет низкоуровневый API для CEF, он связывается с C API CEF. CefSharp, с другой стороны, связывается с C++ API CEF.
Adobe - не единственный крупный игрок, использующий CEF, см. Другие известные приложения, использующие CEF, на странице википедии CEF.
Обновление Chrome Frame не имеет смысла, так как проект был отставной.
Ответ 2
У нас была точно такая же проблема некоторое время назад. Мы хотели использовать библиотеку с открытым исходным кодом CEF3, основанную на WPF и поддерживающую .NET 3.5.
Во-первых, автор CEF сам перечислил привязку для разных языков здесь.
Во-вторых, мы продолжили работу с привязкой .NET CEF3 с открытым исходным кодом, которая называется Xilium.CefGlue и имела хороший успех. В тех случаях, когда что-то не работает так, как вы ожидаете, автор обычно очень чувствителен к проблемам, открытым в встроенном трекер-битрейтете
До сих пор это хорошо нам помогло. Автор обновляет свою библиотеку для поддержки последних выпусков CEF3 и исправлений ошибок на регулярной основе.
Ответ 3
Вот еще один:
http://www.essentialobjects.com/Products/WebBrowser/Default.aspx
Этот также основан на новейшем движке Chrome, но он намного проще в использовании, чем CEF. Это одна .NET-библиотека, которую вы можете просто ссылаться и использовать.
Ответ 4
Взгляните на библиотеку DotNetBrowser, разработанную командой, к которой я принадлежу. Он предоставляет элементы управления браузером WPF и WinForms на основе Chromium, которые довольно легко встроить в приложение .NET. Он поддерживает все современные веб-стандарты, включая HTML5, CSS3 и JavaScript. Страница отображается так же, как в Google Chrome.
Библиотека наследует многопроцессную архитектуру Chromium - каждая веб-страница отображается в отдельном процессе Chromium, и приложение продолжает работать даже после сбоя плагина или любой другой непредвиденной ошибки на веб-странице.
Вот некоторые другие полезные функции, предоставляемые DotNetBrowser: есть возможность прослушивать события загрузки, обрабатывать сетевую активность, настраивать прокси, моделировать действия пользователя, работать с файлами cookie, получать доступ и изменять DOM, прослушивать события DOM, вызывать JavaScript из .NET и наоборот, используйте веб-камеру и микрофон на веб-странице, настройте обмен данными на основе WebRTC и многое другое.
Проверьте API Ссылка для более подробной информации.
Фрагмент кода ниже демонстрирует, как создать BrowserView, внедрить его в форму и загрузить URL:
using System.Windows.Forms;
using DotNetBrowser;
using DotNetBrowser.WinForms;
namespace WinForms.DotNetBrowser
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
BrowserView browserView = new WinFormsBrowserView();
Controls.Add((Control) browserView);
browserView.Browser.LoadURL("http://www.youtube.com");
}
}
}
Запустив приведенный выше пример, вы получите следующий вывод:
![enter image description here]()
Библиотека коммерческая. Коммерческие лицензии включают пакеты поддержки для разных размеров команды. Также можно приобрести исходный код библиотеки.
Помимо собственной страницы, компонент доступен в виде пакета NuGet и пакета VSIX в Visual Studio Marketplace.
Ответ 5
Я использовал Awesomium.NET. Хотя мне не нравится тот факт, что он не с открытым исходным кодом, а также тот факт, что он использует довольно старый механизм рендеринга Webkit, он очень прост в использовании. Это о единственном одобрении, которое я могу ему дать.
Ответ 6
ОБНОВЛЕНИЕ 2018 МОЖЕТ:
Кроме того, вы можете встроить браузер Edge, но только для Windows 10.
Вот решение.
Ответ 7
У меня была такая же проблема с моим читателем WPF RSS, я изначально пошел с Awesomium (я думаю, версия 1.6) Awesomium замечательный. Вы получаете большой контроль за кешированием (изображения и HTML-контент), выполнение JavaScript, перехват загрузок и т.д. Это также очень быстро. Изоляция процесса означает, что при сбое браузера это не приведет к сбою приложения.
Но он также тяжелый, даже релиз сборки добавляет около 10-15 мб (не помню точное число) и, следовательно, небольшой штраф за запуск. Затем я понял, что только проблема, с которой я столкнулся с IE браузером, заключалась в том, что она будет периодически бросать ошибки JavaScript. Но это было исправлено с помощью следующего фрагмента.
Я почти не использовал свое приложение на XP или Vista, но на Win 7 и выше он никогда не разбивался (по крайней мере, не потому, что я использовал браузер IE)
IOleServiceProvider sp = browser.Document as IOleServiceProvider;
if (sp != null)
{
IID_IWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");
Guid IID_IWebBrowser2 = new Guid("D30C1661-CDAF-11d0-8A3E-00C04FC9E26E");
webBrowser;
sp.QueryService(ref IID_IWebBrowserApp, ref IID_IWebBrowser2, out webBrowser);
if (webBrowser != null)
{
webBrowser.GetType().InvokeMember("Silent",
BindingFlags.Instance | BindingFlags.Public | BindingFlags.PutDispProperty, null, webBrowser, new object[] { silent });
}
}