Rechtsanwalt hans lecker

Haufe-Lexware GmbH & Co. KG
79111, Planegg/München
03.06.2010

Mozilla Firefox (Gecko) / Google Chrome - WebBrowser Control für WPF und WindowsForms

Mozilla Firefox (Gecko) / Google Chrome - WebBrowser Control für WPF (Windows Presenation Foundation) und Windows Forms - 3.6.2010

Fortsetzung meines KNOL-Artikels zu Mozilla Firefox 3 (Gecko) WebBrowser Control for Windows Forms und WPF (Windows Presentation Foundation) vom 7.12.2008

Wer ein WebBrowser Control für seine Anwendung benötigt, wird in der Regel auf das im .NET Framework enthaltene WebBrowser-Steuerelement (System.Windows.Forms.WebBrowser Class) zurückgreifen, das fest mit dem Windows Internet Explorer verbunden ist.

Wer jedoch Mozilla Firefox / Gecko oder eine andere Internet Browser Technologie benötigt, wird dazu keine direkte Unterstützung im .NET Framework finden.

Zudem ist beim WebBrowser Control aus dem .NET Framework problematisch, dass es ein Windows Forms Control ist und keine unmittelbare Unterstützung für WPF (Windows Presentation Foundation) hat.

Für beide Problemstellungen gibt es zwischenzeitlich Lösungsansätze.

Download des Beispielcodes zum Artikel

Verwendung von Mozilla Firefox / Gecko in Windows Forms und WPF (Windows Presentation Foundation)

GeckoFX von Skybound stellt ein WebBrowser Control zur Verfügung, mit dem man Mozilla Firefox / Gecko als Windows Forms Control in seine Anwendung einbauen kann.
 Der Source Code von GeckoFX wird unter der Mozilla Public License 1.1 bereitgestellt.
Den Source Code gibt es unter folgender URL: http://code.google.com/p/geckofx/

Für Fragen zu der Komponente gibt es auch ein Forum, das unter folgender URL zu erreichen ist: http://geckofx.org/

Um GeckoFX in der eigenen Anwendung verwenden zu können, muss man auch den XULRunner bei der Verteilung der eigenen Anwendung mitliefern, mit dem GeckoFX kompiliert wurde. Es kann nicht auf die bereits installierte Version von Mozilla Firefox auf dem Computer des Benutzers zurückgegriffen werden.

Eine Modifikation von GeckoFX schafft Abhilfe für dieses Problem. GeckoFXMulti verwendet Proxys und Custom Marshaller, um die Kompatibilität mit xpcom NS interfaces für verschiedene Gecko-Versionen aufrecht zu erhalten. Zusätzlich werden auch Methoden angeboten, um die installierte Firefox Version ausfindig zu machen oder wenn mehrere Versionen vorhanden sind, eine davon zu wählen.

GeckoFXMulti wird wie GeckoFX verwendet, sodass man für einen Wechsel zu GeckoFXMulti lediglich die Bibliothek austauschen muss und der Sourcecode der eigenen Anwendung nicht großartig angepasst werden muss.

Um GeckoFxMulti mit der neuesten unterstützten Version von Firefox / Gecko auf dem System des Benutzers zu initialisieren, wird der folgende Initialize aufgerufen:

Skybound.Gecko.Xpcom.Initialize(true);

Der Initialize sucht in der Registry nach der gewünschten Gecko Version. Sollten mehrere Version vorhanden sein, wird eine Release Versionen einer Alpha/Beta Version vorgezogen.

Es ist jedoch auch möglich, den Prozess der Auswahl der zu verwendenden Gecko Version selbst zu steuern.

// Suche nach allen Gecko Versionen
var geckoVersions = Skybound.Gecko.GeckoAppDiscovery();

// Suche nach allen Gecko Versionen mit zusätzlicher Angabe von Pfaden
var geckoVersions = Skybound.Gecko.GeckoAppDiscovery("e:\\xul2.0", "d:\\portables\firefoxportable3.6b5");

// zusätzliche Angabe von Pfaden
geckoVersions.AddGeckoPath("e:\\firefox");

Nachdem die GeckoAppInfo structure vorbereitet ist, kann GeckoFXMulti initialisiert werden.

Skybound.Gecko.Xpcom.Initialize(gai);

Download und weitere Informationen zu dieser GeckoFXMulti findet man hier.

Verwendung von GeckoFX in WPF (Windows Presentation Foundation)

GeckoFX kann ebenfalls in einer WPF Anwendung verwendet werden. Dazu muss jedoch der Weg über das WindowsFormsHost Control gegangen werden. <Window x:Class="EmbeddingFirefoxWPF2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sb="clr-namespace:GeckoBrowser;assembly=GeckoHelper"
Title="Gecko" Height="350" Width="525" Loaded="Window_Loaded">
<Grid>
<WindowsFormsHost Name="windowsFormsHost1">
<sb:GeckoBrowserUC Dock="Fill"/>
</WindowsFormsHost>
</Grid>
</Window>



Die Navigation zu einer bestimmten URL wird mit dem Aufruf von Navigate erreicht.

public MainWindow()
{
InitializeComponent();
}

private void Window_Loaded(object sender, RoutedEventArgs e)
{
GeckoBrowser.GeckoBrowserUC tBrowser;

tBrowser = (GeckoBrowser.GeckoBrowserUC)this.windowsFormsHost1.Child;
tBrowser.Navigate("http://hanslecker.blogspot.com");
}


WebBrowser mit direkter Unterstützung von WPF ohne WindowsFormsHost



Eine optimale Unterstützung für WPF Anwendung erhält man durch WPF Chromium WebBrowser Control. Wie aus dem Namen des Open Source Projektes bereits hervorgeht, setzt dieses WebBrowser Control auf Google Chrome auf. Als Wrapper für Google Chrome dient Awesomium von Khrona LLC.





Damit ist es nun auch möglich, ein WebBrowser Control mit allen Möglichkeiten von WPF zu nutzen. Gegenüber Lösungsansätzen mit WindowsFormsHost hat man mit dem WPF Chromium WebBrowser Control eine Lösung, die sich vollständig in den Layout-Mechanismus von WPF integriert. Bei dieser Lösung handelt es sich nicht bloß um eine grafische Projektion des WebBrowser nach WPF. Die angezeigte Internetseite kann auch bei Anwendung der verschiedensten Transformationen verwendet werden.





Samples als ClickOnce Apps für WPF Chromium WebBrowser Control


Install WPF Chromium Sample


Install WPF 3D Chromium Sample



Die lästigen Probleme, die man mit WindowsFormsHost immer wieder hat, gehören damit auch der Vergangenheit an.

Die grafischen Fähigkeiten von WPF können damit auch für das WebBrowser Control genutzt werden. So kann man die 3D Fähigkeiten für das Blättern zwischen Internetseiten nutzen. Die Überlagerung von Seiten mit Transparenz Effekten ist nun ebenfalls möglich.

Erwähnt werden sollen noch die weiteren Projekte:



Embedding Gecko - https://developer.mozilla.org/en/Mozilla_Embedding_FAQ/Embedding_Gecko

Manticore - http://mxr.mozilla.org/mozilla/source/extensions/manticore/

WebKit .NET - http://sourceforge.net/projects/webkitdotnet/

Hinweis zum Beispielcode:


Das Beispiel wurde mit Visual Studio 2010 erstellt. In dem Beispiel wird GeckoFXMulti verwendet. Es ist sowohl ein Beispiel für Windows Forms als auch für WPF (Windows Presentation Foundation) enthalten.