Das Internet Explorer-basierte WPF-WebBrowser-Steuerelement weist einige Tastatur- und Fokusprobleme sowie Probleme mit Speicherverlusten auf . Als alternative Lösung für diese Probleme erwägen wir in unserem WPF / C # -Projekt, das auf der HTML-Bearbeitung basiert, verfügbare Optionen für das Hosten von Chromium anstelle des WebBrowser-Steuerelements. Ähnliche Fragen wurden gefragt , hier zuvor. Ich habe die Antworten gelesen und meine eigenen Nachforschungen angestellt, hoffe jedoch, weitere Rückmeldungen von Personen zu erhalten, die tatsächlich eine der folgenden Optionen in Projekten in Produktionsqualität verwendet haben :
Es sieht sehr passend aus, aber ich mag die Tatsache nicht, dass das Projekt nicht Open Source ist und die vollständige Quelle nicht leicht verfügbar ist. Es könnte auch ein Overkill für unser Projekt sein, da das Rendern außerhalb des Bildschirms nicht etwas ist, von dem wir wirklich abhängen.
Chromium Embedded Framework (CEF) und .NET-Bindungen für CEF
Dies ist wahrscheinlich die beste derzeit verfügbare Option. Das Projekt scheint lebendig und aktiv zu sein und ist derzeit mit Chrome v27 synchronisiert. CEF3 verwendet die Chrome-Multiprozessarchitektur. Es sieht auch wie Adobe es gibt einige Billigung .
Während der ursprüngliche Zweck darin bestand, ein HTML5-Plugin für IE und Firefox zu sein, funktioniert es tatsächlich auch als eigenständiges ActiveX-Steuerelement, sodass ich es für die Verwendung mit WPF umschließen konnte. Es stellt eine ausreichende API für die Interaktion mit der inneren Webseite zur Verfügung ( onmessage, addEventListener/removeEventListener, postMessage
). Ich bin mir bewusst, dass Google Chrome Frame einstellen wird , aber ich gehe davon aus, dass die Quellen im Chromium-Repository verbleiben. Es sollte nicht schwierig sein, es mit dem neuesten Chromium-Code zu aktualisieren, und wir hätten die volle Kontrolle darüber.
Nicht gerade Chrom-basiert und verwendet keine V8-Engine, daher ist dies keine Option.
Gibt es eine andere Option, die ich möglicherweise übersehen habe?
Ich würde mich sehr freuen, wenn jemand seine Erfahrungen mit einer der oben genannten Optionen für ein reales WPF-Projekt in Produktionsqualität teilen würde. Hatten Sie Auswirkungen auf die Integration, Lizenzierung oder Bereitstellung? Danke dir.
[EDITED] Ich möchte mich auch bei artlung dafür bedanken, dass sie dieser Frage durch ein großzügiges Kopfgeldangebot Auftrieb gegeben hat.
quelle
Wir hatten vor einiger Zeit genau die gleiche Herausforderung. Wir wollten mit der Open-Source-Bibliothek CEF3 arbeiten, die WPF-basiert ist und .NET 3.5 unterstützt.
Zum einen aufgelistet Autor von CEF sich für verschiedene Sprachen verbindlich hier .
Zweitens haben wir die Open-Source-CEF3-Bindung .NET CEF3 mit dem Namen Xilium.CefGlue eingeführt und damit einen guten Erfolg erzielt . In Fällen, in denen etwas nicht wie erwartet funktioniert, reagiert der Autor normalerweise sehr schnell auf die Probleme, die im integrierten Bitbucket-Tracker auftreten
Bisher hat es uns gut gedient. Der Autor aktualisiert seine Bibliothek, um die neuesten CEF3-Versionen und Fehlerbehebungen regelmäßig zu unterstützen.
quelle
Hier ist noch einer:
http://www.essentialobjects.com/Products/WebBrowser/Default.aspx
Dieser basiert ebenfalls auf der neuesten Chrome-Engine, ist jedoch viel einfacher zu verwenden als CEF. Es ist eine einzelne .NET-DLL, auf die Sie einfach verweisen und die Sie verwenden können.
quelle
Schauen Sie sich die DotNetBrowser- Bibliothek an, die von dem Team entwickelt wurde, dem ich angehöre. Es bietet Chromium-basierte WPF- und WinForms-Browsersteuerelemente, die sich ganz einfach in .NET-Anwendungen einbetten lassen. Es unterstützt alle modernen Webstandards einschließlich HTML5, CSS3 und JavaScript. Die gerenderte Seite sieht genauso aus wie in Google Chrome.
Die Bibliothek erbt die Multiprozessarchitektur von Chromium. Jede Webseite wird in einem separaten Chromium-Prozess gerendert, und die Anwendung funktioniert auch nach einem Absturz des Plugins oder einem anderen unerwarteten Fehler auf der Webseite weiter.
Hier sind einige weitere nützliche Funktionen von DotNetBrowser: Sie können Ladeereignisse abhören, Netzwerkaktivitäten verarbeiten, Proxys konfigurieren, Benutzeraktionen simulieren, mit Cookies arbeiten, auf DOM zugreifen und diese ändern, DOM-Ereignisse abhören, JavaScript aus .NET aufrufen und umgekehrt: Verwenden Sie eine Webkamera und ein Mikrofon auf der Webseite, richten Sie eine WebRTC-basierte Kommunikation ein und vieles mehr .
Weitere Informationen finden Sie in der API-Referenz .
Das folgende Codefragment zeigt, wie Sie eine Browseransicht erstellen, in ein Formular einbetten und eine URL laden:
Sobald Sie das obige Beispiel ausgeführt haben, erhalten Sie die folgende Ausgabe:
Die Bibliothek ist kommerziell. Kommerzielle Lizenzen enthalten Support-Pakete für verschiedene Teamgrößen. Es ist auch möglich, den Quellcode der Bibliothek zu erwerben.
Neben einer eigenen Seite ist die Komponente als NuGet-Paket und als VSIX-Paket im Visual Studio Marketplace verfügbar .
quelle
Ich habe Awesomium.NET verwendet. Obwohl ich die Tatsache nicht mag, dass es nicht Open Source ist, und auch die Tatsache, dass es eine ziemlich alte Webkit-Rendering-Engine verwendet, ist es wirklich einfach zu bedienen. Das ist ungefähr die einzige Bestätigung, die ich geben kann.
quelle
UPDATE 2018 MAI:
Alternativ können Sie den Edge-Browser einbetten, jedoch nur Windows 10 als Ziel festlegen.
Hier ist die Lösung.
quelle
Ich hatte das gleiche Problem mit meinem WPF-RSS-Reader. Ich habe mich ursprünglich für Awesomium entschieden (ich denke, Version 1.6). Awesomium ist großartig. Sie erhalten viel Kontrolle über das Caching (Bilder und HTML-Inhalte), die JavaScript-Ausführung, das Abfangen von Downloads usw. Es ist auch super schnell. Die Prozessisolation bedeutet, dass beim Absturz des Browsers die App nicht abstürzt.
Aber es ist auch schwer, sogar der Release-Build fügt ungefähr 10-15 MB hinzu (ich kann mich nicht an die genaue Anzahl erinnern) und daher eine leichte Startstrafe. Dann wurde mir klar, dass das einzige Problem, das ich mit der IE-Browsersteuerung hatte, darin bestand, dass die JavaScript-Fehler von Zeit zu Zeit ausgelöst wurden. Aber das wurde mit dem folgenden Snippet behoben.
Ich habe meine App unter XP oder Vista kaum benutzt, aber unter Win 7 und höher ist sie nie abgestürzt (zumindest nicht, weil ich die IE-Browsersteuerung verwendet habe).
quelle
IWebBrowser2
Schnittstelle zu bekommen .Microsoft veröffentlicht das WPF-Steuerelement " Microsoft Edge WebView2 ", mit dem wir eine großartige, kostenlose Option zum Einbetten von Chromium in Windows 10, Windows 8.1 oder Windows 7 erhalten. Es ist über Nuget als Paket verfügbar
Microsoft.Web.WebView2
.quelle