Опции для встраивания Chromium вместо IE WebBrowser с WPF / C #

Основанный на Internet Explorer WPF WebBrowser контролирует некоторые проблемы с клавиатурой и фокусом, а также проблемы с утечкой памяти . В качестве альтернативного решения этих проблем мы рассматриваем доступные варианты размещения Chromium вместо управления WebBrowser в нашем проекте WPF / C #, основанном на редактировании HTML. Подобные вопросы заданы здесь ранее. Я прочитал ответы и провел собственное исследование, но я надеюсь получить еще больше отзывов от людей, которые фактически использовали любой из следующих вариантов в проектах качества продукции :

Awesomium и Awesomium.NET

Это выглядит очень уместно, но мне не нравится тот факт, что проект не является открытым исходным кодом, а полный источник недоступен. Кроме того, это может быть излишним для нашего проекта, поскольку нестандартное рендеринг не является чем-то, от чего мы действительно зависим.

Привязки Xromium 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 за то, что вы получили этот вопрос, предложив щедрое предложение.

Вы уже указали наиболее заметные решения для внедрения 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 wikipedia .

Обновление Chrome Frame бессмысленно, поскольку проект был удален.

Некоторое время назад у нас был такой же вызов. Мы хотели использовать библиотеку с открытым исходным кодом CEF3, основанную на WPF и поддерживающую .NET 3.5.

Во-первых, автор CEF сам перечислил обязательство для разных языков здесь .

Во-вторых, мы продолжили связывание .NET CEF3 с открытым исходным кодом, которое называется Xilium.CefGlue, и с ним успешно справились . В тех случаях, когда что-то не работает так, как вы ожидаете, автор, как правило, очень реагирует на проблемы, открытые во встроенном трекере Bitbucket

Пока это нам хорошо. Автор обновляет свою библиотеку для поддержки последних выпусков CEF3 и исправлений ошибок на обычных базах.

Вот еще один:

http://www.essentialobjects.com/Products/WebBrowser/Default.aspx

Этот также основан на новейшем движке Chrome, но он намного проще в использовании, чем CEF. Это единственная .NET-библиотека, которую вы можете просто ссылаться и использовать.

Взгляните на библиотеку DotNetBrowser, разработанную командой, к которой я принадлежу. Он предоставляет элементы управления браузером WPF и WinForms на основе Chromium, которые довольно легко внедрить в приложение .NET. Он поддерживает все современные веб-стандарты, включая HTML5, CSS3 и JavaScript. Отображаемая страница выглядит точно так же, как в Google Chrome.

Библиотека наследует многопроцессорную архитектуру Chromium – каждая веб-страница отображается в отдельном хромовом процессе, и приложение будет продолжать работать даже после сбоя плагина или любой другой непредвиденной ошибки на веб-странице.

Вот некоторые другие полезные функции, предоставляемые DotNetBrowser: можно прослушивать события загрузки, обрабатывать сетевую активность, настраивать прокси, имитировать действия пользователя, работать с кукисами, получать доступ и изменять DOM, прослушивать события DOM, вызывать JavaScript из .NET. и наоборот, используйте веб-камеру и микрофон на веб-странице, настройте связь на базе WebRTC и многое другое .

Ознакомьтесь с API Reference для получения более подробной информации.

В приведенном ниже fragmentе кода показано, как создать браузер, вставить его в форму и загрузить 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"); } } } 

После запуска приведенного выше примера вы получите следующий результат:

введите описание изображения здесь

Библиотека является коммерческой, однако она бесплатна для использования в проектах Open Source и Academic. Коммерческие лицензии include пакеты поддержки для разных размеров команды. Также возможно приобрести исходный код библиотеки.

Помимо собственной страницы компонент доступен как пакет NuGet и как пакет VSIX в Visual Studio Marketplace.

Я использовал Awesomium.NET. Хотя мне не нравится тот факт, что он не является открытым исходным кодом, а также тот факт, что он использует довольно старый механизм рендеринга Webkit, он действительно прост в использовании. Это единственное подтверждение, которое я могу ему дать.

ОБНОВЛЕНИЕ 2018 МОЖЕТ:

Кроме того, вы можете вставлять браузер Edge, но только нацеливать windows 10.

Вот решение.

У меня была такая же проблема с моим читателем WPF RSS, я изначально ушел с Awesomium (я думаю, версия 1.6) Awesomium замечательный. Вы получаете большой контроль за кешированием (изображения и HTML-контент), выполнение JavaScript, перехват загрузок и т. Д. Это также очень быстро. Изоляция процесса означает, что при сбое браузера это не приведет к сбою приложения.

Но он также тяжелый, даже релиз сборки добавляет около 10-15 мб (не помню точное число) и, следовательно, небольшой штраф за запуск. Затем я понял, что только проблема, с которой я столкнулся с IE браузером, заключалась в том, что она будет периодически бросать ошибки JavaScript. Но это было исправлено следующим fragmentом.

Я почти не использовал свое приложение на 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 }); } } 
  • Почему WPF поддерживает привязку к свойствам объекта, но не полям?
  • Как обновить пользовательский интерфейс из другого streamа, запущенного в другом classе
  • Нет вывода на консоль из приложения WPF?
  • Почему я не могу ссылаться на System.ComponentModel.DataAnnotations?
  • Как я могу читать / записывать настройки app.config во время выполнения без использования пользовательских настроек?
  • Режим рендеринга программ - WPF
  • Скрыть строку сетки в WPF
  • WPF Databinding: как мне получить доступ к «родительскому» контексту данных?
  • Как узнать, какой монитор находится в окне WPF?
  • Модель Mvvm ViewModel
  • Открыть окно WPF в WindowsForm APP
  • Interesting Posts
    Давайте будем гением компьютера.