Варианты встраивания Chromium вместо управления IE WebBrowser с помощью WPF/C#
управление WPF WebBrowser на основе Internet Explorer страдает от некоторых проблем с клавиатурой и фокусом, а также проблем с утечкой памяти. В качестве альтернативного решения этих проблем мы рассматриваем доступные варианты размещения Chromium вместо управления WebBrowser в нашем проекте WPF/C#, основанном на редактировании HTML. Подобные вопросы были заданы здесь ранее. Я прочитал ответы и сделал свое собственное исследование, но я надеюсь получить еще несколько отзывов от людей, которые фактически использовали следующие варианты в производстве-качественные проекты:
это выглядит очень уместно, но мне не нравится тот факт, что проект не является открытым исходным кодом и полный источник не легко доступен. Кроме того, это может быть излишним для нашего проекта, так как внеэкранный рендеринг-это не то, от чего мы действительно зависим.
Chromium Embedded Framework (CEF) и привязки .NET для CEF
Это, пожалуй, лучший вариант в настоящее время. Проект, похоже, жив и активен, в настоящее время синхронизируется с Chrome v27. Cef3 и фильтруют использует хром мульти-процессная архитектура. Это также выглядит, как Adobe дает его некоторые утверждения.
в то время как первоначальная цель его должна была быть HTML5 плагин для IE и Firefox, он на самом деле работает как автономный элемент управления ActiveX тоже, так что я может обернуть его для использования с WPF. Он выставляет достаточный API для взаимодействия с внутренней веб-страницы (onmessage, addEventListener/removeEventListener, postMessage).
Я знаю, что Google-это прекратить Chrome Frame, но я предполагаю, что источники останутся в репозитории Chromium. Это не должно быть трудно обновить его с последним кодом хрома, как мы идем, и мы будем иметь полный контроль над этим.
не совсем на основе хрома и не использует V8 двигателя, так что это не вариант.
есть ли другой вариант, который я мог бы упустить?
Я был бы очень признателен, если бы кто-то поделился своим опытом с любым из вышеперечисленных вариантов для реального проекта WPF с качеством производства. Были ли у вас какие-либо последствия для интеграции, лицензирования или развертывания? Спасибо.
[отредактировано]
Я также хотел бы поблагодарить artlung за то, что он дал этому вопросу импульс, предоставив щедрый щедрое предложение.
7 ответов:
вы уже перечислили наиболее известные решения для встраивания хрома (CEF, Chrome Frame, Awesomium). Нет больше проектов, которые имеют значение.
есть еще Berkelium (см. Berkelium Sharp и Беркулисом Управлял), но это emebeds старая версия хрома.
CEF это ваш лучший выбор - это полностью открытый исходный код и часто обновляется. Это единственный вариант, который позволяет добавьте последнюю версию Chromium. Теперь, когда Пер Лундберг активно работает над портированием CEF 3 на CefSharp, это самый лучший вариант для будущего. Есть также Xilium.CefGlue, но этот обеспечивает низкоуровневый API для CEF, он привязывается к C API CEF. CefSharp, с другой стороны, привязывается к API C++ CEF.
Adobe не является единственным крупным игроком, использующим CEF, см. другие известные приложения, использующие CEF на CEF Википедия страница.
обновление Хромированная Рама - это бессмысленно, так как проект был пенсии.
У нас был точно такой же вызов некоторое время назад. Мы хотели пойти с библиотекой cef3 с открытым исходным кодом, которая основана на WPF и поддерживает .NET 3.5.
во-первых, сам автор CEF перечислил привязку для разных языков здесь.
во-вторых, мы пошли вперед с открытым исходным кодом .NET cef3 привязки, которая называется Xilium.CefGlue и имел хороший успех с ним. В тех случаях, когда что-то не работает, как вы ожидали, автор обычно очень реагирует на проблемы, открытые в build-in bitbucket tracker
до сих пор он служил нам хорошо. Автор обновляет свою библиотеку для поддержки последних выпусков CEF3 и исправляет ошибки на регулярной основе.
вот еще один:
http://www.essentialobjects.com/Products/WebBrowser/Default.aspx
Этот также основан на последнем двигателе Chrome, но его гораздо проще использовать, чем CEF. Это одна dll .NET, которую вы можете просто ссылаться и использовать.
посмотри DotNetBrowser библиотека, разработанная командой, к которой я принадлежу. Он предоставляет элементы управления браузером WPF и WinForms на основе хрома, которые довольно легко встроить в приложение .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"); } } }Как только вы запустите пример выше, вы получите следующий результат:
библиотека является коммерческой, однако она бесплатна для использования в открытых источниках и академических проектах. Коммерческие лицензии включают в себя пакеты поддержки для различных размеров группы. Также можно приобрести исходный код библиотеки.
помимо собственной страницы компонент доступен как пакета NuGet и пакет VSIX в Visual Studio Marketplace.
Я использовал Awesomium.NET. хотя мне не нравится тот факт, что он не является открытым исходным кодом, а также тот факт, что он использует довольно старый движок рендеринга Webkit, он действительно прост в использовании. Это единственное одобрение, которое я могу дать.
ОБНОВЛЕНИЕ 2018 МАЯ:
кроме того, вы можете встроить браузер Edge, но только для таргетинга windows 10.
У меня была такая же проблема с моим WPF RSS reader, я изначально пошел с Awesomium (я думаю, версия 1.6) Awesomium велик. Вы получаете много контроля для кэширования (изображений и HTML-контента), выполнения JavaScript, перехвата загрузок и т. д. Это также очень быстро. Изоляция процесса означает, что при сбое браузера он не разбивает приложение.
но это также тяжело, даже релиз сборки добавляет около 10-15mb (не могу вспомнить точное число) и, следовательно, небольшой штраф запуска. Я тогда понял, что единственная проблема, которую я имел с управлением браузером 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 }); } }

Comments