Internet Explorer на основе управления WPF страдает WebBrowser от некоторых клавишных и фокусных вопросов и проблем утечки памяти . В качестве альтернативного решения этих проблем мы рассматриваем доступные варианты размещения Chromium вместо элемента управления WebBrowser в нашем проекте WPF / C #, основанном на редактировании HTML. Подобные вопросы были заданы здесь ранее. Я прочитал ответы и провел собственное исследование, но я надеюсь получить больше отзывов от людей, которые фактически использовали любой из следующих вариантов в проектах производственного качества :
Это выглядит очень уместно, но мне не нравится тот факт, что проект не с открытым исходным кодом, а полный исходный код не так легко получить. Кроме того, это может быть излишним для нашего проекта, так как закадровый рендеринг - это не то, от чего мы действительно зависим.
Привязки Chromium Embedded Framework (CEF) и .NET для CEF
Это, вероятно, лучший вариант из доступных на данный момент. Проект кажется живым и активным, в настоящее время синхронизирован с Chrome v27. CEF3 использует многопроцессную архитектуру Chrome. Это также выглядит как Adobe дает ему некоторую поддержку .
Хотя первоначальная цель заключалась в том, чтобы быть плагином HTML5 для IE и Firefox, на самом деле он также работает как автономный элемент управления ActiveX, поэтому я мог обернуть его для использования с WPF. Он предоставляет достаточный API для взаимодействия с внутренней веб-страницей ( onmessage, addEventListener/removeEventListener, postMessage
). Я знаю, что Google должен прекратить Chrome Frame, но я предполагаю, что источники останутся в хранилище Chromium. Не должно быть сложностей обновить его последним кодом Chromium, и мы будем иметь полный контроль над этим.
Не совсем на основе хрома и не использует двигатель V8, так что это на самом деле не вариант.
Есть ли другой вариант, который я мог упустить из виду?
Я был бы очень признателен, если бы кто-то поделился своим опытом с любым из вышеперечисленных вариантов для реального проекта WPF производственного качества. Были ли у вас какие-либо последствия для интеграции, лицензирования или развертывания? Спасибо.
[ИЗМЕНЕНО] Я также хотел бы поблагодарить artlung за поддержку этого вопроса, предоставив щедрое предложение за вознаграждение.
У нас была точно такая же проблема некоторое время назад. Мы хотели использовать библиотеку с открытым исходным кодом CEF3, основанную на WPF и поддерживающую .NET 3.5.
Во - первых, автор CEF сам в списке привязки для различных языков здесь .
Во-вторых, мы продолжили работу с привязкой .NET CEF3 с открытым исходным кодом, которая называется Xilium.CefGlue, и с ней справились . В тех случаях, когда что-то работает не так, как вы ожидаете, автор обычно очень чутко реагирует на проблемы, открытые во встроенном трекбите
До сих пор это послужило нам хорошо. Автор обновляет свою библиотеку для поддержки последних выпусков CEF3 и исправления ошибок на регулярной основе.
источник
Вот еще один:
http://www.essentialobjects.com/Products/WebBrowser/Default.aspx
Этот также основан на новейшем движке Chrome, но его гораздо проще использовать, чем CEF. Это один .NET DLL, который вы можете просто сослаться и использовать.
источник
Взгляните на библиотеку DotNetBrowser, разработанную командой, к которой я принадлежу. Он предоставляет элементы управления браузером WPF и WinForms на основе Chromium, которые довольно легко встроить в приложение .NET. Он поддерживает все современные веб-стандарты, включая HTML5, CSS3 и JavaScript. Страница отображается точно так же, как в Google Chrome.
Библиотека наследует многопроцессную архитектуру Chromium - каждая веб-страница отображается в отдельном процессе Chromium, и приложение продолжает работать даже после сбоя плагина или любой другой непредвиденной ошибки на веб-странице.
Вот некоторые другие полезные функции, предоставляемые DotNetBrowser: есть возможность прослушивать события загрузки, обрабатывать сетевую активность, настраивать прокси, моделировать действия пользователя, работать с файлами cookie, получать доступ и изменять DOM, прослушивать события DOM, вызывать JavaScript из .NET и наоборот, используйте веб-камеру и микрофон на веб-странице, настройте связь на основе WebRTC и многое другое .
Проверьте API Ссылка для более подробной информации.
Фрагмент кода ниже демонстрирует, как создать BrowserView, внедрить его в форму и загрузить URL:
Запустив приведенный выше пример, вы получите следующий вывод:
Библиотека коммерческая. Коммерческие лицензии включают пакеты поддержки для разных размеров команды. Также можно приобрести исходный код библиотеки.
Помимо своей собственной страницы компонент доступен в виде пакета NuGet и , как VSIX пакет в Visual Studio Marketplace.
источник
Я использовал Awesomium .NET. Хотя мне не нравится тот факт, что он не с открытым исходным кодом, а также тот факт, что он использует довольно старый механизм рендеринга Webkit, его действительно легко использовать. Это единственное подтверждение, которое я могу дать.
источник
ОБНОВЛЕНИЕ 2018 МОЖЕТ:
Кроме того, вы можете встроить браузер Edge, но только для Windows 10.
Вот решение.
источник
У меня была та же проблема с моим WPF RSS Reader, я изначально пошел с Awesomium (я думаю, версия 1.6) Awesomium отлично. Вы получаете большой контроль над кэшированием (изображения и HTML-контент), выполнением JavaScript, перехватом загрузок и так далее. Это также супер быстро. Изоляция процесса означает, что при сбое браузера не происходит сбой приложения.
Но это также тяжело, даже сборка релиза добавляет около 10-15 Мб (не помню точное число) и, следовательно, небольшой штраф при запуске. Затем я понял, что единственной проблемой, с которой я столкнулся при управлении браузером IE, было то, что оно время от времени выдает ошибки JavaScript. Но это было исправлено с помощью следующего фрагмента.
Я почти не использовал свое приложение на XP или Vista, но на Win 7 и выше оно никогда не падало (по крайней мере, не потому, что я использовал управление браузером IE)
источник
IWebBrowser2
интерфейс.Microsoft выпускает WPF-элемент управления « Microsoft Edge WebView2 », который предоставит нам отличный бесплатный вариант для встраивания Chromium в Windows 10, Windows 8.1 или Windows 7. Он доступен через Nuget в качестве пакета
Microsoft.Web.WebView2
.источник