Опции для встраивания хрома вместо управления IE WebBrowser с помощью WPF/C#

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

Awesomium и Awesomium.NET

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

Хром Встроенный Framework (CEF) и привязки .NET для CEF

Это, пожалуй, лучший вариант в настоящее время. Проект кажется живым и активным, в настоящее время синхронизируется с Chrome v27. CEF3 использует многопроцессорную архитектуру Chrome. Также похоже, что Adobe дает это некоторые утверждения.

Chrome кадр Google

в то время как первоначальная цель заключалась в том, чтобы быть плагином HTML5 для IE и Firefox, это на самом деле работает как автономный элемент управления ActiveX, поэтому я могу обернуть его для использования с WPF. Это разоблачает достаточный API для взаимодействия с внутренней веб-страницы (onmessage, addEventListener/removeEventListener, postMessage). Я в курсе Гугл в прекратить Chrome Frame, но я предполагаю, что источники останутся в репозитории Chromium. Это не должно быть трудно, чтобы обновить его с последним кодом Chromium, как мы идем, и мы будем иметь полный контроль над этим.

в WebKit .Чистая обертка

не совсем на основе хрома и не использует двигатель 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");
        }
    }
}

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

enter image description here

библиотека является коммерческой, однако она бесплатна для использования в открытых и академических проектах. Коммерческие лицензии включают пакеты поддержки для различных размеров группы. Также можно приобрести исходный код библиотеки.

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


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


ОБНОВЛЕНИЕ 2018 МАЯ:

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

вот решение.


У меня была такая же проблема с моим 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 });
    }
}