This page as english version.
Bereits seit geraumer Zeit gibt es ein Mozilla ActiveX Control (entwickelt
von Adam Lock), welches es ermöglicht, eine abgespeckte Version des freien Browsers als ActiveX
Komponente in Hostanwendungen einzubetten. Dazu zählen beispielsweise alle Microsoft Office Anwendungen, die Visual Basic-Entwicklungsumgebungen oder
Delphi. Im Rahmen meiner Diplomarbeit schien dieses Control perfekt für ein Teilproblem zu sein. Dabei hatte ich erhebliche Anlaufschwierigkeiten
um auf den DOM-Baum eines geladenen Dokumentes zuzugreifen. Die grundlegende Integration und das ansurfen von Seiten verlief dagegen praktisch sofort.
Nach etwas mehr als zwei Tagen bin ich dann in einem Delphi-Forum über einen entscheidenden Hinweis gestolpert.
Die Bibliothek Microsoft HTML Object Library (Dateiname: mshtml.tlb) muss als Verweis eingetragen werden. Dann kann die entscheidende Eigenschaft
MozillaBrowser.document als typisierte Variable angelegt werden (Interface IHTMLDocument2). Anschließend hat man als kleinen Nebeneffekt gleich noch
die Kontextvorschläge, welche Eigenschaften und Methoden zur Verfügung stehen. Und der Zugriff funktioniert.
Da ich derzeit noch in der Diplomarbeit stecke, hier nur ein kurzer Auszug aus dem Quellcode, ich habe mir vorgenommen, danach ein etwas
umfangreicheres Beispielprojekt an dieser Stelle inklusive Screenshots zu veröffentlichen.
Voraussetzungen, damit folgender Code funktioniert:
- Download und
Installation des Mozilla ActiveX Controls
- Erstellen eines neuen VB oder VBA Projektes, am einfachsten ein neues Word-Dokument, an VBA sind die folgenden Schritte orientiert
- Wechseln in den Visual Basic Editor (ALT + F11 oder Extras/Makro/Visual Basic Editor)
- Im Menü auf Extras/Verweise klicken und in der Bibliotheksliste den Eintrag Microsoft HTML Object Library suchen und ankreuzen
- Anlegen eines Formulars
- mit der rechten Maustaste auf die Toolbox klicken zusätzliche Steuerelemente anklicken. In der nun erscheinenden Liste nach dem
Eintrag MozillaBrowser Class suchen und ebenfalls ankreuzen
- Das nun in der Toolsbox neu erschienene Steuerelement in das leere Formular einfügen (Name: MozillaBrowser1)
- Zwei Buttons (CommandButton1 und CommandButton2) hinzufügen (der erste Button schickt den MozillaBrowser auf eine Webseite, mit dem zweiten lässt sich dann nach dem Laden
der Seite auf den DOM-Baum zugreifen)
- untenstehenden Beispielcode kopieren und in den Formularcode einfügen
- Das Formular ausführen, den "ansurf"-Button verwenden, nach dem Laden den DOM-Zugriff Button verwenden. Formular schließen und die Ausgaben
im Direktfenster ansehen :-)
Private Sub CommandButton1_Click()
MozillaBrowser1.navigate2 "http://www.heise.de"
End Sub
Private Sub CommandButton2_Click()
MsgBox
"teste DOM-Modell-Zugriff mit Mozilla ActiveX Control"
Dim myDocument
As IHTMLDocument2
Debug.Print "locationURL: " & MozillaBrowser1.LocationURL
Debug.Print "locationName: " & MozillaBrowser1.LocationName
Debug.Print myDocument.LastModified
On Error GoTo Ende
Set myDocument = MozillaBrowser1.document
Debug.Print "title: " & myDocument.Title
Debug.Print "all.length: " & myDocument.all.Length
Debug.Print "innerhtml: " & myDocument.Body.innerHTML
Ende:
If Err.Number <> 0
Then
Debug.Print Err.Number & "; Descr.: " & Err.Description & " Source: " & _
Err.Source & " DLLError: " & Err.LastDllError
End If
End Sub