Samstag, 22. April 2023

HTML-Code direkt in das neue Edge Browser Steuerelement laden

Man kann HTML-Code in eine lokale Datei schreiben und diese mittels der Navigate-Methode in das Webbrowser Steuerelement laden. Wie man HTML-Code direkt in das neue Edge Browser Steuerelement laden kann und was dabei zu beachten ist, zeigt dieser Beitrag.

Einer der einfachsten Wege, um HTML-Code in das bisherige Webbrowser-Steuerelement zu laden ist es, das HTML in eine Datei zu schreiben und im Anschluss die soeben erstellte Datei mittels der Methode "Navigate" zu laden. Die Alternative hierzu ist die Eigenschaften "Document.Object" zu nutzen und dort den HTML-Code mittels der Methode "Write" zu laden. Der Code hierfür sieht ungefähr so aus:

Das funktioniert wunderbar. Die Projekte Better-Access-Charts und Better-Access-PivotTable machen Gebrauch davon.

Wenn man sich die Dokumentation zum neuen Edge Browser Steuerelement anschaut, stellt man schnell fest, dass dieses über ein sehr sparsames Objektmodell verfügt. Eine Eigenschaft mit dem Namen "Document" ist nicht mehr vorhanden.

Wie man diese Aufgabe mit dem neuen Edge Browser Steuerelement löst, erklärt der Microsoft Mitarbeiter Joe Jimenez in einer Präsentation bei der Denver Area Access User Group. Der relevante Teil der Präsentation beginnt bei Minute 40:00.

Inhaltlich geht es darum, dass man die Methode ExecuteJavascript verwendet. Dieser Methode werden die Befehle Open, Write und Close übergeben. Damit lässt sich der HTML-Code direkt in das Edge Browser Steuerelement laden. Der Code dafür sieht wie folgt aus:

Ich habe es ausprobiert: Ein neues Formular erstellt, dort das neue Edge Browser Steuerelement eingefügt und den obigen Code auf einen Button gelegt. Dann kam die Enttäuschung. Es passiert einfach nichts. Der HTML-Code wird nicht in das Edge Browser Steuerelement geladen.

Nach ein wenig Nachdenken ist die Ursache schnell gefunden. Wenn das Edge-Browser Steuerelement - so wie in meinem Setup - noch keinen Inhalt enthält, kann der Javascript-Code nicht ausgeführt werden.
Im zweiten Versuch habe ich beim Edge Browser Steuerelement in der Eigenschaft Steuerelementinhalt die Adresse (m)einer Webseite eingetragen. Danach funktionierte der obige Code wie gewünscht.

Als nächstes habe ich den zu ladenden HTML-Code etwas erweitert. Damit der generierte HTML-Code wohlgeformt und gut lesbar ist, wenn ich ihn als Text im Direktfenster ausgeben lassen, habe ich die einzelnen Zeilen jeweils mit vbCrLf abgeschlossen. Dies wiederum hat dazu geführt, dass die Ausführung der Befehle keine Wirkung zeigt. Es passiert wieder nichts.

Im Rahmen meiner Versuche bin ich dann darauf gestoßen, dass das Zeichen vbCrLf das Problem darstellt. Wenn ich diese aus meinem Code entferne, funktioniert alles wie gewünscht. Diese Erkenntnis habe ich genutzt und ersetze einfach das Zeichen vbCrLf durch vbNullString. Damit funktioniert es wieder und der HTML-Code - ohne vbCrLf - wird in das Edge Browser Steuerelement geladen.
Der zugehörige Code sieht wie folgt aus:

Als nächstes habe ich den HTML-Code noch um Script-Dateien erweitert. Bei meinen Versuchen damit habe ich ein Wechselbad der Gefühle erlebt. Mal hat es funktioniert und mal eben nicht. Immer wenn ich dachte, ich hätte die Lösung, hat es bei einem weiteren Test nicht funktioniert.

Am Ende bin ich die Einbindung von Script-Dateien dann systematisch angegangen. Ich habe festgestellt, dass es einen Unterschied macht, ob man den oben genannten Code ausführt, nachdem man das Edge Browser Steuerelement mit einer Adresse aus dem Internet oder mit einer lokal gespeicherten HTML-Datei initialisiert.

Außerdem habe ich festgestellt, dass es auch einen Unterschied macht, ob man die Script-Datei als Referenz aus dem Internet oder als lokale Datei einbindet. Bei einer lokalen Datei kommt es dann auch noch darauf an, dass die einzelnen Ordner im Pfad mittels "/" und nicht mit "\" getrennt werden.

Das Ergebnis kann man wie folgt zusammenfassen:

  • Wenn das Edge Browser Steuerelement mit einer Adresse aus dem Internet initialisiert wurde, funktioniert als Script Referenz nur eine Adresse aus dem Internet. Mit dem Verweis auf eine lokale Datei funktioniert es nicht.
  • Wenn das Edge Browser Steuerelement mit einer lokalen Datei initialisiert wurde, dann kommen als Script Referenz sowohl Adressen aus dem Internet als auch lokale Dateien in Frage. Bei lokalen Dateien müssen in der Pfadangabe die "\" durch "/" ersetzt werden.

Insgesamt gibt es also einiges zu beachten, wenn man HTML-Code direkt in das neue Edge-Browser-Steuerelement laden möchte.
Hier noch einmal eine kurze Zusammenfassung meiner Erkenntnisse:

  • Man kann HTML-Code direkt in das Edge Browser Steuerelement laden
  • Die Ausführung erfolgt mittels JavaScript (Code siehe oben)
  • Es geht nur, wenn das Steuerelement bereits mit einer Quelle "initialisiert" ist
  • Der HTML-Code darf nicht vbCrLf beinhalten
  • Bei der Einbindung von Script-Dateien ist die Initialisierung des Edge Browser Steuerelements und der Speicherort der Script-Datei zu beachten.
    (Details siehe oben)

Keine Kommentare: