Варианты внедрения Chromium вместо элемента управления IE WebBrowser с WPF / C #

Обновлено в 2020 году, у меня связал мою статью, в которой я сравниваю объем памяти при различных подходах к размещению HTML WebView в базовом настольном приложении Windows:


Элемент управления WPF WebBrowser на основе Internet Explorer страдает от некоторых проблем с клавиатурой и фокусом и проблемы с утечкой памяти. В качестве альтернативного решения этих проблем мы рассматриваем доступные варианты размещения Chromium вместо элемента управления WebBrowser в нашем проекте WPF / C # на основе редактирования 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 и не использует двигатель V8, так что это не вариант.

Есть ли другой вариант, который я мог упустить из виду?

Я был бы очень признателен, если бы кто-нибудь поделился своим опытом с любым из вышеперечисленных вариантов реального проекта WPF производственного качества. Были ли у вас какие-либо последствия для интеграции, лицензирования или развертывания? Спасибо.

[EDITED] Я также хотел бы поблагодарить artlung за поддержку этого вопроса, предоставив щедрое предложение щедрости.


person noseratio    schedule 08.08.2013    source источник


Ответы (7)


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

person Czarek Tomczak    schedule 22.08.2013
comment
Вы забыли также сказать, что половина вещей не будет работать ... например, очистка файлов cookie, кеш ... установка прокси и т. Д. Просто используйте Awesomium и сохраните свои проблемы. - person ; 07.09.2013
comment
Хе-хе, хороший ответ, Чарек, спасибо за кредит. :) (не видел этого до сих пор) - person Per Lundberg; 31.10.2013
comment
Конечно, стоит отметить: в любом проекте с открытым исходным кодом явно может чего-то не хватать. Ни Xilium.CefGlue, ни CefSharp не являются исключениями из этого правила. Хорошая вещь в материалах с открытым исходным кодом заключается в том, что вы действительно можете потратить (достаточно мало) времени на изучение более мелкой проблемы и включить исправление. Мы время от времени видим это с помощью CefSharp, и это довольно удобно. - person Per Lundberg; 31.10.2013
comment
Поправьте меня, если я ошибаюсь, но разве CefSharp не требует DLL размером более 50 МБ? Это приводит к гигантской установке. Libcef.dll указан как основная зависимость, и его размер составляет 38 МБ. - person Krafty; 05.01.2015
comment
Установки @Krafty позволяют упаковать его с использованием алгоритмов вроде 7z, в результате чего размер уменьшен с 55 МБ - ›до 17 МБ. Размер CefSharp невелик по сравнению с Google Chrome, который составляет 152 МБ в распакованном виде и 40 МБ при установке. - person Czarek Tomczak; 05.01.2015
comment
Я попробовал CEFSharp сегодня и должен сказать, что он сломан во многих отношениях, что я даже не удосужился продолжить. даже при его компиляции возникали ошибки, которые вы не ожидали увидеть, например, файл заголовка не найден и т. д. удалось скомпилировать его после 2 часов поиска проблем и ручной загрузки материала, я получаю ошибки времени выполнения с расплывчатыми сообщениями. Также размер папки уже 180 Мб (libcef.dll 116 Мб) - person AaA; 17.05.2020
comment
Ссылка на Xilium.CefGlue мертва - 404 | Эта ссылка здесь не работает. - person Pang; 27.10.2020

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

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

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

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

person Artem    schedule 19.08.2013
comment
На самом деле это точка (исходящая с другой стороны, в данном случае это CefSharp) - CefSharp является 4.0 только с нескольких месяцев из-за проблем с поддержкой 3.5 с новыми наборами инструментов VS. (VS2010 + не может поддерживать старые фреймворки с C ++ / CLI, что немного грустно, потому что заставляет нас использовать .NET 4 или действительно старую версию Visual Studio ...) - person Per Lundberg; 31.10.2013

Вот еще один:

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

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

person Jason    schedule 06.01.2014
comment
Поддержка тоже фантастическая. - person huseyint; 17.02.2014
comment
Похоже, что на этом веб-сайте отсутствует основная информация - какая версия Chrome включает в себя? - person Czarek Tomczak; 06.08.2014
comment
Ой, не бесплатно. НЕ БЕСПЛАТНО. О чем думали эти парни? :) - person dkellner; 09.01.2018
comment
Здесь следует указать, что, хотя есть пробная версия, она не бесплатна. - person ewilan; 16.01.2018

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

person Ming Slogar    schedule 16.08.2013
comment
Не могли бы вы примерно рассказать, насколько велика была ваша пользовательская база для этого проекта? - person noseratio; 17.08.2013
comment
На самом деле я никогда не разворачивал проект, поэтому пользовательская база была нулевая. Я только сам экспериментировал с вариантами. - person Ming Slogar; 17.08.2013
comment
Я месяцами страдал, поддерживая приложение C # на основе Awesomium; это может быть круто для игр на C ++, но в C # их управление браузером явно глючит. Сложное развертывание (вам нужен их странный установщик, чтобы добавить что-то в GAC), ошибочное поведение (иногда он запускается с черным экраном, пользователь должен перезапускать приложение вручную) и его медленная скорость (веб-страницы НЕ отображаются при загрузке , он как бы зависает до тех пор, пока страница не будет полностью / наполовину загружена, и для инициализации на медленной машине требуется 5-10 секунд) - person Robin Rodricks; 17.01.2016
comment
В конце концов я выбрал CefSharp, и результаты были потрясающими. ‹Инициализация 100 мс (т.е. мгновенная инициализация) и без ошибок. Вещи просто работают. Как это должно. Кроме того, CefSharp НЕ нужно добавлять в GAC, поэтому никаких изменений в установщике не требуется. Просто скопируйте свои файлы и вперед. Я упоминал, что CEF / CefSharp лучше, чем все библиотеки Mozilla / WebKit C #, которые я тестировал? Да и ради всего святого, не используйте IE. Оно работает. Да, есть, но у него полностью отсутствует функция, и он очень плохо работает (скорость). - person Robin Rodricks; 17.01.2016
comment
@RobinRodricks Тоже мой опыт. Я почти отказался от этого подхода, но потом нашел CefSharp :-) (И кого волнует еще пара мегабайт в наши дни, когда драйверы принтера поставляются на DVD :-)?) - person Xan-Kun Clark-Davis; 25.01.2018

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

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

Вот решение.

person Rahul    schedule 11.05.2018

У меня была такая же проблема с моим RSS-ридером WPF, я изначально выбрал 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 });
    }
}
person Sameer Vartak    schedule 21.08.2013
comment
Спасибо за ответ. Так вы в конце концов вернулись к IE от Awesomium? - person noseratio; 21.08.2013
comment
Да. и я был счастлив. Я использую ClickOnce, поэтому развертываемый файл был крошечным и без зависаний при запуске! - person Sameer Vartak; 21.08.2013
comment
Спасибо, я проголосовал за ваш ответ. Кстати, есть другой способ получить внутренний IWebBrowser2 интерфейс. - person noseratio; 21.08.2013

Microsoft выпускает элемент управления WPF Microsoft Edge WebView2, который будет получите отличный бесплатный вариант для встраивания Chromium в Windows 10, Windows 8.1 или Windows 7. Он доступен через Nuget в виде пакета Microsoft.Web.WebView2.

person scottheckel    schedule 15.05.2020
comment
Это отличный вариант, хотя сейчас 2020 год, и сегодня я буду искать кроссплатформенное решение, например. грамм. Chromely. - person noseratio; 18.05.2020
comment
Я думаю, это зависит от того, собираетесь ли вы добавить немного веб-вещей в настольное приложение или настольное приложение, построенное как веб-приложение. Я думаю, вы бы использовали WebView2 только в том случае, если бы это был небольшой веб-материал для настольного приложения. - person scottheckel; 18.05.2020