Опции для встраивания хрома вместо управления IE WebBrowser с помощью WPF/C#
Internet Explorer на основе WPF WebBrowser управления страдает от некоторых проблемы с клавиатурой и фокусом и проблемы с утечкой памяти. В качестве альтернативного решения этих проблем мы рассматриваем доступные варианты размещения Chromium вместо управления WebBrowser в нашем проекте WPF/C#, основанном на редактировании HTML. Подобные вопросы были попросил здесь ранее. Я прочитал ответы и провел собственное исследование, но я надеюсь получить еще обратная связь от людей, которые фактически использовали любой из следующих вариантов в проектах качества продукции:
это выглядит очень уместно, но мне не нравится тот факт, что проект не является открытым исходным кодом, и полный источник не легко доступен. Кроме того, это может быть излишним для нашего проекта, так как внеэкранный рендеринг-это не то, от чего мы действительно зависим.
Хром Встроенный Framework (CEF) и привязки .NET для CEF
Это, пожалуй, лучший вариант в настоящее время. Проект кажется живым и активным, в настоящее время синхронизируется с Chrome v27. CEF3 использует многопроцессорную архитектуру Chrome. Также похоже, что Adobe дает это некоторые утверждения.
в то время как первоначальная цель заключалась в том, чтобы быть плагином HTML5 для IE и Firefox, это на самом деле работает как автономный элемент управления ActiveX, поэтому я могу обернуть его для использования с WPF. Это разоблачает достаточный API для взаимодействия с внутренней веб-страницы (onmessage, addEventListener/removeEventListener, postMessage
).
Я в курсе Гугл в прекратить Chrome Frame, но я предполагаю, что источники останутся в репозитории Chromium. Это не должно быть трудно, чтобы обновить его с последним кодом Chromium, как мы идем, и мы будем иметь полный контроль над этим.
не совсем на основе хрома и не использует двигатель V8, поэтому это не вариант.
есть другой вариант я упустил?
Я был бы очень признателен, если бы кто-то поделился своим опытом с любым из вышеперечисленных вариантов для реального, качественного проекта WPF. Имели ли вы какие-либо последствия для интеграции, лицензирования или развертывания? Спасибо.
[отредактировано] Я бы тоже спасибо artlung для придания этому вопросу импульс, предоставляя щедрое предложение щедрости.
7 ответов
вы уже перечислили наиболее известные решения для встраивания хрома (CEF, Chrome Frame, Awesomium). Больше нет проектов, которые имеют значение.
есть еще Беркулисом (см. Berkelium Sharp и Беркулисом Управлял), но это emebeds старая версия хрома.
CEF это ваш лучший выбор - это полностью открытый исходный код и часто обновляется. Это единственный вариант, который позволяет добавьте последнюю версию Chromium. Теперь, когда Пер Лундберг активно работает над портированием CEF 3 на CefSharp, это лучший вариант для будущего. Существует также Xilium.CefGlue, но этот предоставляет API низкого уровня для CEF, он привязывается к C API CEF. CefSharp, с другой стороны, привязывается к C++ API 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: можно прослушивать события загрузки, обрабатывать сетевую активность, настраивать прокси-сервер, имитировать действия пользователя, работать с куки-файлами, получать доступ и изменять 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, он очень прост в использовании. Это единственное подтверждение, которое я могу дать.
У меня была такая же проблема с моим WPF RSS reader, я изначально пошел с Awesomium (я думаю, версия 1.6) Awesomium отлично. Вы получаете большой контроль за кэшированием (изображения и HTML-контент), выполнением JavaScript, перехватом загрузок и так далее. Это также очень быстро. Изоляция процесса означает, что при сбое браузера он не разбивает приложение.
но это также тяжело, даже релиз сборки добавляет около 10-15mb (не могу вспомнить точное число) и, следовательно, небольшой запуск штраф. Я тогда понял, что единственная проблема, которую я имел с IE browser control, заключалась в том, что он будет бросать ошибки JavaScript время от времени. Но это было исправлено следующим фрагментом.
я почти не использовал свое приложение на XP или Vista, но на Win 7 и выше он никогда не разбился (по крайней мере, не потому, что я использовал IE browser control)
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 });
}
}