Kurioser Logik-Fehler (DOM des IE)
22.10.2014 16:56:11
Zwenn
leider fällt mir keine Kurzbeschreibung für meine Beobachtung ein. Deshalb versuche ich zu veranschaulichen, was in meiner Funktion passiert bzw. nicht passiert.
Ich greife über das DOM des IE auf die Struktur einer HTML Seite zu. Um festzustellen, ob es sich um die richtige Seite handelt oder ob eine Fehlerseite geliefert wurde, frage ich ab, ob bestimmte HTML-Tags enthalten sind.
Da es sich bei dem HTML-Dokument um ein Objekt handelt, werden abgefragte Tags auch als Objekte zurück geliefert. Ist ein Tag jedoch nicht vorhanden, kann das entsprechende Objekt nicht erzeugt werden, was der IE 11 mit einer Fehlermeldung quittiert (zu IE 8 Zeiten wurde einfach NULL zurückgegeben bzw. man konnte auf "Is Nothing" testen).
Um diesen Fehler nun abzufangen und den Umstand auszunutzen, dass er aufgetreten ist, ist die einzige Möglichkeit "On Error Goto". Genau diese Fehlerbehandlung habe ich in eine Funktion ausgelagert, die entweder "true" (Tag gefunden) oder "false" (Fehler ausgelöst, weil das Objekt nicht erstellt werden konnte) zurück liefert.
Das funktioniert auch genau so, wie gewünscht. Allerdings nur mit einem Trick. Ich verstehe allerdings ums verrecken nicht, warum dieser Trick angewendet werden muss.
Der Code meiner Funktion:
Function TagVorhanden(oIE As Object, pruef_tag As String) As Boolean
Dim knoten As Object
Dim dummy As String
On Error GoTo TagNichtGefunden
Set knoten = oIE.document.getElementsByTagName(pruef_tag)
dummy = knoten
TagVorhanden = True
Exit Function
TagNichtGefunden:
TagVorhanden = False
End Function
Ich übergebe das Objekt oIE, welches das HTML-Dokument enthält. Außerdem den HTML-Tag, auf den geprüft werden soll. Wird der Tag nicht gefunden, wird "false" zurück gegeben. Das funktioniert immer. Wird der Tag aber gefunden, wird nur "true" zurück gegeben, wenn vorher etwas mit dem erzeugten Objekt "knoten" angestellt wird.
Wird die Zeile dummy = knoten auskommetiert, gibt die Funktion "irgend etwas" zurück, aber niemals "true".
Weiß irgend jemand, warum das so ist und was zurück gegeben wird? Ich bin schon fast irre geworden, bis ich rausgefunden hatte, wie das passiert, was ich erwarte, verstehe das Verhalten aber nicht.
Viele Grüße,
Zwenn