Варіанти вбудовування Chromium замість IE WebBrowser управління за допомогою WPF / C #


158

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

Awesomium та Awesomium.NET

Це виглядає дуже доречно, але мені не подобається той факт, що проект не є відкритим, і повне джерело не просто доступне. Крім того, це може бути надлишковим для нашого проекту, оскільки поза екранне візуалізація - це не те, від чого ми насправді залежимо.

Вбудовані рамки хрому (CEF) та прив'язки .NET для CEF

Це, мабуть, найкращий доступний варіант. Проект, здається, живий та активний, на даний момент синхронізується з Chrome v27. CEF3 використовує багатопроцесорну архітектуру Chrome. Також схоже, що Adobe надає йому певну підтримку .

Google Frame Chrome

Хоча початковою метою було бути плагін HTML5 для IE та Firefox, він насправді також працює як автономний елемент управління ActiveX, тому я міг обернути його для використання з WPF. Він відкриває достатній API для взаємодії з внутрішньою веб-сторінкою ( onmessage, addEventListener/removeEventListener, postMessage). Мені відомо, що Google повинен припинити Chrome Frame, але я припускаю, що джерела залишаться у сховищі Chromium. Оновити його за допомогою останнього коду Chromium слід не важко, і ми мали б повний контроль над цим.

Обгортка WebKit .NET

Не зовсім на основі хрому і не використовується двигун V8, тому це насправді не варіант.

Чи є якийсь інший варіант, який я, можливо, не помітив?

Я був би дуже вдячний, якби хтось поділився своїм досвідом з будь-яким із перерахованих вище варіантів для реального проекту з якості продукції WPF. Чи мали ви якісь наслідки інтеграції, ліцензування чи розгортання? Дякую.

[EDITED] Я також хотів би подякувати artlung за те, що він дав поштовх цьому питанню, надаючи щедру пропозицію багатства.

Відповіді:


124

Ви вже перерахували найпомітніші рішення для вбудовування хрому (CEF, Chrome Frame, Awesomium). Більше немає важливих проектів.

Досі існує проект Беркелій (див. Беркелій Шарп і Беркелій Керований ), але він містить стару версію хрому.

CEF - ваша найкраща ставка - вона є повністю відкритим кодом та часто оновлюється. Це єдиний варіант, який дозволяє вставляти останню версію Chromium. Тепер, коли Пер Лундберг активно працює над перенесенням CEF 3 на CefSharp , це найкращий варіант для майбутнього. Існує також Xilium.CefGlue , але цей надає API низького рівня для CEF, він прив'язується до C API CEF. З іншого боку, CefSharp пов'язується з API C ++ CEF.

Adobe - не єдиний головний гравець, що використовує CEF, дивіться інші помітні програми, що використовують CEF, на сторінці вікіпедії CEF .

Оновлення Chrome Frame безглуздо, оскільки проект було вимкнено .


Ви забули також сказати, що половина матеріалів не буде працювати .. як очищення файлів cookie, кеш .. встановлення проксі-серверів тощо. Просто використовуйте Awesomium і врятуйте свої проблеми.

4
Хе-хе, приємна відповідь Czarek, дякую за заслугу. :) (не бачив цього досі)
Пер Лундберг

4
Звичайно, варто зазначити: у будь-якому проекті з відкритим кодом явно можуть бути речі, які "відсутні". Ні Xilium.CefGlue, ні CefSharp не є винятками з цього правила. Приємна річ про речі з відкритим кодом - це те, що ви можете фактично витратити (досить низьку) кількість часу на розгляд меншого випуску та включити своє виправлення. Ми бачимо, що час від часу із CefSharp це досить акуратно.
Пер Лундберг

1
Виправте мене, якщо я помиляюся, але чи не потрібно CefSharp вимагати DLL-файлів, які перевищують 50MB? Це призводить до гігантської установки установки. Libcef.dll вказаний як основна залежність, і він становить 38 МБ
Krafty

2
@Krafty Установлення дозволяє упакувати його за допомогою таких алгоритмів, як 7z, і це призводить до зменшення розміру з 55 Мб -> до 17 МБ. Розмір CefSharp не дуже великий в порівнянні з Google Chrome, який розпакований 152 Мбайт і встановлено 40 Мб.
Чарек Томчак

11

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

Під - перше, автор CEF сам в списку прив'язки для різних мов тут .

По-друге, ми продовжили зв'язок .NET CEF3 з відкритим кодом, який називається Xilium.CefGlue і мав успіх у ньому. У випадках, коли щось працює не так, як ви очікували, автор зазвичай дуже чуйно реагує на проблеми, відкриті у вбудованому біт-трекер

Поки що він нам добре служив. Автор оновлює свою бібліотеку для підтримки останніх версій CEF3 та виправлень помилок на регулярних базах.


2
Це фактично пункт (що йде з "іншої сторони", будучи CefSharp в цьому) - CefSharp 4.0 лише з декількох місяців через проблеми з підтримкою 3.5 з новими наборами інструментів VS. (VS2010 + не може підтримувати старіші рамки з C ++ / CLI, що трохи сумно, оскільки це змушує нас використовувати .NET 4 або дійсно стару версію Visual Studio ...)
Per Lundberg

8

Ось ще одна:

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

Цей також заснований на останньому двигуні Chrome, але його набагато простіше, ніж CEF. Це єдиний .NET dll, який ви можете просто посилати та використовувати.


Підтримка теж фантастична.
huseyint

3
Основна інформація, схоже, відсутня на цьому веб-сайті - яку версію Chrome вона містить?
Czarek Tomczak

2
А-о, не безкоштовно. НЕ БЕЗКОШТОВНО. Що думали ці хлопці? :)
dkellner

Спереду слід зазначити, що, хоча є пробна версія, вона не є безкоштовною.
ewilan

8

Погляньте на бібліотеку DotNetBrowser, розроблену командою, до якої я належу. Він забезпечує керування веб-переглядачами WPF та WinForms на основі Chromium, які досить легко вбудувати у додаток .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.


1
виглядає дійсним, і я вбудував пробну версію у свій додаток. Питання лише в тому, що це комерційний продукт, а ліцензія - не дуже дешева. Інакше на мене виглядає солідно.
DoronG

На жаль DotNetBrowser НЕ безкоштовно! : /
Деніз

4

Я використовував Awesomium.NET. Хоча мені не подобається той факт, що він не з відкритим кодом, а також те, що він використовує досить старий механізм візуалізації Webkit, користуватися ним дуже просто. Це про єдине схвалення, яке я можу надати.


1
Не могли б ви поділитися приблизно наскільки вашою базою користувачів для цього проекту була приблизно приблизно?
noseratio

Я ніколи фактично не розгортав проект, тому база користувачів була нульовою. Я сам експериментував із варіантами.
Ming Slogar

2
Я мучився місяцями, підтримуючи додаток C # на основі Awesomium; він може гойдатися для ігор на C ++, але в C # їх керування браузером прямо не вдається. Складне розгортання (потрібен їх дивний інсталятор, щоб додати речі в GAC), помилкова поведінка (іноді вона запускається з чорного екрана, користувач повинен перезапустити додаток вручну) та його повільна швидкість (веб-сторінки НЕ відображаються під час завантаження , вона якось зависає, поки сторінка повністю / наполовину не завантажена, а для ініціалізації на повільній машині потрібно 5-10 секунд)
TheFlash

5
Нарешті я поїхав з CefSharp, і результати були дивовижні. <100 мс ініціалізація (тобто миттєвий ініт) та відсутність "помилок". Речі просто працюють. Як слід. Також CefSharp НЕ потрібно додавати в GAC, тому не потрібно змінювати інсталятор. Просто скопіюйте свої файли та перейдіть. Чи згадував я, що CEF / CefSharp кращий за всі тестовані бібліотеки Mozilla / WebKit C #? О, і заради небес, не використовуйте IE. Це працює. Так, це так, але в ньому повністю відсутні функції, і він працює дуже погано (швидкість).
TheFlash

1
@RobinRodricks Точно також мій досвід. Я ледь не відмовився від підходу, але тоді знайшов CefSharp :-) (А кого цікавить ще пара Мб більше, коли ці драйвери принтерів приходять на DVD :-)?)
Ксан-Кун Кларк-Девіс


2

У мене була проблема з моїм 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 });
    }
}

Дякую за відповідь. Отже, ви зрештою повернулися до IE від Awesomium?
noseratio

Так. і я був щасливий. Я використовую ClickOnce, щоб розгортання було крихітним і без запуску заморожування!
Самєр Вартак

Дякую, я відповідав за вашу відповідь. До речі, є ще один спосіб отримати внутрішній IWebBrowser2інтерфейс.
nosratio

Класно. чи працюють керування Activex у WPF? Дякую за підсумкове голосування :-)
Sameer Vartak

Вибачте, ретельно не почитали посилання. Так, це зразок XAML, і він працює. Дякую.
Sameer Vartak

1

Microsoft випускає керування WPF " Microsoft Edge WebView2 ", що дасть нам чудовий безкоштовний варіант для вбудовування Chromium у Windows 10, Windows 8.1 або Windows 7. Він доступний через Nuget як пакет Microsoft.Web.WebView2.


Це чудовий варіант, хоча це 2020 рік, і сьогодні я б шукав кросплатформенне рішення, наприклад, Chromely .
носраціо

1
Я думаю, це залежить, якщо ви дивитесь на те, щоб додати трохи веб-речей до настільного додатку або настільного додатку, побудованого як веб-додаток. Я думаю, ви б використовували WebView2 лише в тому випадку, якщо це був невеликий веб-матеріал для настільного додатка.
scottheckel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.