Formant WPF WebBrowser oparty na programie Internet Explorer cierpi na niektóre problemy z klawiaturą i fokusem oraz problemy z wyciekiem pamięci . Jako alternatywne rozwiązanie tych problemów rozważamy dostępne opcje hostowania Chromium zamiast kontrolki WebBrowser w naszym projekcie WPF / C # opartym na edycji HTML. Podobne pytania zostały zapytałem tutaj wcześniej. Przeczytałem odpowiedzi i przeprowadziłem własne badania, ale mam nadzieję, że uzyskam więcej informacji zwrotnych od osób, które faktycznie korzystały z którejkolwiek z poniższych opcji w projektach o jakości produkcyjnej :
Wygląda to bardzo dobrze, ale nie podoba mi się fakt, że projekt nie jest open-source, a 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 powiązania .NET dla CEF
Jest to prawdopodobnie najlepsza obecnie dostępna opcja. Projekt wydaje się być żywy i aktywny, obecnie jest zsynchronizowany z Chrome v27. CEF3 wykorzystuje architekturę wieloprocesową Chrome. Wygląda również na to, że Adobe udziela mu poparcia .
Chociaż pierwotnym celem była wtyczka HTML5 dla IE i Firefoksa, w rzeczywistości działa również jako samodzielna kontrolka ActiveX, więc mogłem ją opakować do użytku z WPF. Udostępnia wystarczający interfejs API do interakcji z wewnętrzną stroną internetową ( onmessage, addEventListener/removeEventListener, postMessage
). Wiem, że Google zaprzestaje działalności Chrome Frame, ale zakładam, że źródła pozostaną w repozytorium Chromium. Nie powinno być trudno zaktualizować go najnowszym kodem Chromium na bieżąco i mielibyśmy nad tym pełną kontrolę.
Niezupełnie oparty na Chromium i nie używa silnika V8, więc tak naprawdę 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 rzeczywistego projektu WPF o jakości produkcyjnej. Czy masz jakiekolwiek konsekwencje związane z integracją, licencjonowaniem lub wdrożeniem? Dziękuję Ci.
[ZMIENIONO] Chciałbym również podziękować artlungowi za przyspieszenie tego pytania, oferując hojną ofertę nagród.
źródło
Dokładnie to samo wyzwanie mieliśmy jakiś czas temu. Chcieliśmy korzystać z biblioteki open source CEF3 opartej na WPF i obsługującej .NET 3.5.
Po pierwsze, autor CEF sam wymienione wiążące dla różnych języków tutaj .
Po drugie, zdecydowaliśmy się na rozwiązanie open source .NET CEF3, które nazywa się Xilium.CefGlue i odniosło z nim dobry sukces. W przypadkach, gdy coś nie działa tak, jak można się spodziewać, autor zazwyczaj bardzo reaguje na problemy otwarte w wbudowanym narzędziu do śledzenia bitbucketów
Jak dotąd dobrze nam służył. Autor aktualizuje swoją bibliotekę, aby regularnie obsługiwać najnowsze wydania CEF3 i poprawki błędów.
źródło
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 pojedynczy plik dll .NET, do którego można po prostu odwoływać się i używać.
źródło
Zapoznaj się z biblioteką DotNetBrowser opracowaną przez zespół, do którego należę. Zapewnia oparte na Chromium kontrolki przeglądarki WPF i WinForms, które można dość łatwo osadzić w aplikacji .NET. Obsługuje wszystkie nowoczesne standardy internetowe, w tym HTML5, CSS3 i JavaScript. Wyrenderowana strona wygląda dokładnie tak, jak w Google Chrome.
Biblioteka dziedziczy architekturę wieloprocesową Chromium - każda strona internetowa jest renderowana w osobnym procesie Chromium, a aplikacja będzie działać 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żytkownika, pracować z plikami cookie, uzyskiwać dostęp i modyfikować DOM, nasłuchiwać zdarzeń DOM, wywoływać JavaScript z .NET i odwrotnie, użyj kamery internetowej i mikrofonu na stronie internetowej, skonfiguruj komunikację opartą na WebRTC i nie tylko .
Sprawdź Reference API dla więcej szczegółów.
Poniższy fragment kodu pokazuje, jak utworzyć BrowserView, osadzić go w formularzu i załadować adres URL:
Po uruchomieniu powyższego przykładu otrzymasz następujące dane wyjściowe:
Biblioteka ma charakter komercyjny. Licencje komercyjne obejmują pakiety wsparcia dla różnych wielkości zespołów. Istnieje również możliwość zakupu kodu źródłowego biblioteki.
Oprócz własnej strony komponent jest dostępny jako pakiet NuGet i pakiet VSIX w Visual Studio Marketplace.
źródło
Użyłem Awesomium.NET. Chociaż nie podoba mi się fakt, że nie jest to oprogramowanie typu open source, a także fakt, że używa dość starego silnika renderującego Webkit, jest naprawdę łatwy w użyciu. To jedyne poparcie, jakie mogę mu dać.
źródło
UPDATE 2018 MAJ:
Alternatywnie możesz osadzić przeglądarkę Edge, ale kierować tylko na okna 10.
Oto rozwiązanie.
źródło
Miałem ten sam problem z moim czytnikiem WPF RSS, początkowo wybrałem Awesomium (myślę, że wersja 1.6) Awesomium jest świetne. Masz dużą kontrolę nad buforowaniem (obrazy i zawartość HTML), wykonywaniem JavaScript, przechwytywaniem pobierania i tak dalej. Jest też super szybki. Izolacja procesów oznacza, że awaria przeglądarki nie powoduje awarii aplikacji.
Ale jest też ciężki, nawet wersja wydania dodaje około 10-15 MB (nie pamiętam dokładnej liczby), a tym samym niewielką karę za uruchomienie. Wtedy zdałem sobie sprawę, że jedynym problemem, jaki miałem z kontrolą przeglądarki IE, było to, że od czasu do czasu rzucała ona błędy JavaScript. Ale zostało to naprawione za pomocą następującego fragmentu kodu.
Prawie nie korzystałem z mojej aplikacji na XP lub Vista, ale na Win 7 i nowszych nigdy się nie zawiesiła (przynajmniej nie dlatego, że użyłem kontroli przeglądarki IE)
źródło
IWebBrowser2
interfejsu.Microsoft wypuszcza formant WPF „ Microsoft Edge WebView2 ”, który zapewni nam doskonałą, bezpłatną opcję osadzania Chromium w systemie Windows 10, Windows 8.1 lub Windows 7. Jest ona dostępna w pakiecie za pośrednictwem Nuget
Microsoft.Web.WebView2
.źródło