Opcje osadzania Chromium zamiast kontrolki IE WebBrowser z WPF / C#

[[1]} Kontrola przeglądarki WPF WebBrowser oparta na Internet Explorerze cierpi na pewne problemy z klawiaturą i fokusem oraz problemy z wyciekiem pamięci. Jako alternatywne rozwiązanie tych problemów rozważamy dostępne opcje hostingu Chromium zamiast kontroli przeglądarki internetowej w naszym projekcie WPF/C# opartym na edycji HTML. Podobne pytania zostały zadawane tutaj wcześniej. Przeczytałem odpowiedzi i zrobiłem własne badania, ale mam nadzieję uzyskać więcej informacji zwrotnych od ludzi, którzy w rzeczywistości wykorzystały jedną z następujących opcji w projektach dotyczących jakości produkcji :

Awesomium i Awesomium.NET

Wygląda to bardzo dobrze, ale nie podoba mi się fakt, że projekt nie jest open-source i pełne źródło nie jest łatwo dostępne. Ponadto może to być przesada dla naszego projektu, ponieważ renderowanie poza ekranem nie jest czymś, na czym tak naprawdę polegamy.

Chromium Embedded Framework (CEF) i . wiązania. NET dla CEF

Jest to prawdopodobnie najlepsza opcja obecnie dostępna. Projekt wydaje się być żywy i aktywny, jest obecnie zsynchronizowany z Chrome v27. CEF3 wykorzystuje architekturę Chrome multi-process. Wygląda też na to, że Adobe daje mu jakieś poparcie .

Google Chrome Frame

Podczas gdy pierwotnym celem było to wtyczka HTML5 dla IE i Firefoksa, to faktycznie działa jako samodzielna Kontrola ActiveX zbyt, więc mogłem owinąć go do użytku z WPF. Pozwala na wyświetlenie odpowiedniego API do interakcji z wewnętrzną stroną (onmessage, addEventListener/removeEventListener, postMessage). Wiem, że Google ma przerwać Chrome Frame, ale zakładam, że źródła pozostaną w repozytorium Chromium. Nie powinno być trudno zaktualizować go najnowszym kodem Chromium, a my mielibyśmy pełną kontrolę nad tym.

WebKit. NET wrapper

Nie do końca na bazie chromu i nie używa silnika V8, więc nie jest to opcja.

Czy jest jakaś inna opcja, którą mogłem przeoczyć?

Byłbym bardzo wdzięczny, gdyby ktoś podzielił się swoim doświadczeniem z którąkolwiek z powyższych opcji dla prawdziwego projektu WPF o jakości produkcyjnej. Czy miałeś jakieś implikacje związane z integracją, licencjonowaniem lub wdrożeniem? Dziękuję.

[EDITED] Chciałbym również podziękować artlung za udzielenie tego pytania impuls poprzez dostarczenie hojnej oferty nagród.

Author: Community, 2013-08-08

7 answers

Wymieniłeś już najbardziej godne uwagi rozwiązania do osadzania chromu(CEF, Chrome Frame, Awesomium). Nie ma już żadnych ważnych projektów.

Jest jeszcze projekt Berkelium (Zobacz Berkelium Sharpi Berkelium zarządzane), ale jest to stara wersja chromu.

CEF jest najlepszym rozwiązaniem - jest w pełni open source i często aktualizowany. Jest to jedyna opcja, która pozwala na osadzenie najnowszej wersji Chromium. Teraz Per Lundberg aktywnie pracuje nad portowaniem CEF 3 do CefSharp , jest to najlepsza opcja na przyszłość. Istnieje również Xilium.CefGlue , ale ten zapewnia niski poziom API dla CEF, wiąże się z C API CEF. CefSharp natomiast wiąże się z C++ API CEF.

[[0]}Adobe nie jest jedynym głównym graczem korzystającym z CEF, zobacz inne godne uwagi aplikacje korzystające z CEF na stronie CEF wikipedia .

Aktualizacja chromowana ramka jest bezcelowa, ponieważ projekt został wycofany .

 108
Author: Czarek Tomczak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-15 17:20:32

Mieliśmy dokładnie to samo wyzwanie jakiś czas temu. Chcieliśmy skorzystać z biblioteki cef3 open source, która jest oparta na WPF i obsługuje. NET 3.5.

Po pierwsze, autor CEF sam wymienił bindowanie dla różnych języków tutaj .

Po drugie, zdecydowaliśmy się na opensource ' owe Wiązanie. NET CEF3, które nazywa się Xilium.CefGlue i odniósł z nim duży sukces. W przypadkach, gdy coś nie działa tak, jak można się spodziewać, autor zazwyczaj bardzo reaguje na otwarte problemy w build-in bitbucket tracker

Do tej pory dobrze nam służył. Autor aktualizuje swoją bibliotekę w celu obsługi najnowszych wydań CEF3 i poprawek błędów na regularnych bazach.

 11
Author: Artem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-19 08:43:07

Oto kolejny:

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

Ten jest również oparty na najnowszym silniku Chrome, ale jest znacznie łatwiejszy w użyciu niż CEF. Jest to pojedyncza biblioteka DLL. NET, którą można po prostu odwołać i użyć.

 8
Author: Jason,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-06 18:52:54

Spójrz na bibliotekę DotNetBrowser stworzoną przez zespół, do którego należę. Zapewnia oparte na Chromium WPF i WinForms kontrole przeglądarki, które są dość łatwe do osadzenia w aplikacji. NET. Obsługuje wszystkie nowoczesne standardy internetowe, w tym HTML5, CSS3 i JavaScript. Renderowana strona wygląda dokładnie tak, jak w Google Chrome.

Biblioteka dziedziczy wieloprocesową architekturę Chromium – każda strona internetowa jest renderowana w osobnym procesie Chromium, a aplikacja będzie kontynuuj pracę nawet po awarii wtyczki lub innym nieoczekiwanym błędzie na stronie internetowej.

Oto kilka innych przydatnych funkcji, dostarczanych przez DotNetBrowser: można słuchać zdarzeń ładowania, obsługiwać aktywność sieciową, konfigurować proxy, symulować działania użytkowników, pracować z plikami cookie, uzyskiwać dostęp i modyfikować DOM, słuchać zdarzeń DOM, wywoływać JavaScript Z. NET i odwrotnie, używać kamery internetowej i mikrofonu na stronie internetowej, konfigurować komunikację opartą na WebRTC i więcej .

Aby uzyskać więcej informacji, zapoznaj się z referencją API .

Poniższy fragment kodu pokazuje, jak utworzyć przeglądarkę, osadzić ją w formularzu i załadować adres 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");
        }
    }
}

Po uruchomieniu powyższego przykładu otrzymasz następujące wyjście:

Tutaj wpisz opis obrazka

Biblioteka jest komercyjna, jednak jest darmowa do użytku w projektach Open-Source i akademickich. Licencje komercyjne obejmują pakiety wsparcia dla różnych rozmiarów zespołów. Możliwe jest również zakup kodu źródłowego biblioteki.

Oprócz własnej strony komponent jest dostępny jako pakiet NuGet oraz jako pakiet VSIX w Visual Studio Marketplace.

 8
Author: Vladimir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-17 12:06:46

Użyłem Awesomium.NET. chociaż nie podoba mi się fakt, że nie jest open-source, a także fakt, że używa dość starego silnika renderowania Webkit, jest naprawdę łatwy w użyciu. To jedyne poparcie, jakie mogę mu dać.

 5
Author: Ming Slogar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-16 21:29:09

AKTUALIZACJA 2018 MAJ:

Alternatywnie można osadzić przeglądarkę Edge, ale tylko targetowanie windows 10.

Oto rozwiązanie.

 3
Author: Rahul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-11 06:16:07

Miałem ten sam problem z moim czytnikiem RSS WPF, początkowo poszedłem z Awesomium (myślę, że Wersja 1.6) Awesomium jest świetny. Otrzymujesz dużą kontrolę nad buforowaniem (obrazy i zawartość HTML), wykonywaniem JavaScript, przechwytywaniem plików do pobrania i tak dalej. Jest też super szybki. Izolacja procesu oznacza, że gdy przeglądarka się zawiesza, nie zawiesza aplikacji.

Ale jest też ciężki, nawet release build dodaje około 10 - 15MB (nie pamiętam dokładnej liczby) i stąd niewielka kara za rozruch. Wtedy zdałem sobie sprawę,, jedynym problemem, jaki miałem z kontrolą przeglądarki IE, było to, że co jakiś czas wyrzuca błędy JavaScript. Ale to zostało naprawione poniższym fragmentem.

Prawie nie używałem mojej aplikacji na XP lub Vista, ale na Win 7 i wyżej nigdy się nie zawiesiła (przynajmniej nie dlatego, że używałem kontroli przeglądarki 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 });
    }
}
 2
Author: Sameer Vartak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-23 13:49:20