AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TWebBrowser: innerHTML für versch. HTML-Elemente auf Existenz prüfen

TWebBrowser: innerHTML für versch. HTML-Elemente auf Existenz prüfen

Ein Thema von Caps · begonnen am 5. Okt 2012 · letzter Beitrag vom 12. Okt 2012
Antwort Antwort
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#1

TWebBrowser: innerHTML für versch. HTML-Elemente auf Existenz prüfen

  Alt 5. Okt 2012, 10:20
Guten Morgen,

ich möchte gern über das OleObject einer WebBrowser-Komponente auf verschiedene HTML-Elemente (schreibend) zugreifen.
Den Schreibzugriff stelle ich mir folgendermaßen vor:
Delphi-Quellcode:
elementID := 'meineUeberschrift'; // es existiert eine entspr. ID im Dokument
WebBrowser1.OleObject.Document.GetElementByID(elementID).innerHTML := inhalt; // inhalt: String
Das funktioniert auch solange das HTML-Element Kinder d.h. Inhalt haben darf.

Mein Problem ist nun folgendes: ich ermittle zunächst alle Elemente des Dokuments, die eine ID haben. Dann gehe ich diese Elemente in einer Schleife durch und führe blind (wie oben dargestellt) einen Schreibzugriff auf das Element aus (wann sinnvollerweise tatsächlich geschrieben werden soll ist eine andere Geschichte, lassen wir es mal so stehen).
Ich wünsche mir an dieser Stelle die Möglichkeit, abfragen zu können, ob das HTML-Element, welches ich gerade "am Wickel" habe, überhaupt "Kinder" haben darf, d.h. ob die Eigenschaft innerHTML existiert bzw. geschrieben werden darf.

Ich habe in der MSDN-Dok gelesen und auch selbst erlebt, dass die Schnittstelle eine "NotSupported"-Exception wirft. Das ist eine mögliche Lösung für mein Problem, aber unschön, weil der Debugger das Programm auch bei behandelten Ausnahmen unterbricht (kann man das abstellen?). Das stört doch schon beim Testlauf.
Ich kann innerHTML <> '' prüfen, was aber nur heißt, dass es leer ist, nicht dass es nicht existiert. Leider kann ich nicht innerHTML <> nil prüfen, da es wohl kein Zeiger ist.

Nun also meine Frage auf den Punkt gebracht: wie kann ich für ein bestimmtes HTML-Element prüfen, ob die Eigenschaft innerHTML existiert und geschrieben werden kann?

Beste Grüße
Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."

Geändert von Caps ( 5. Okt 2012 um 17:07 Uhr) Grund: Offene Frage und Push
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#2

AW: TWebBrowser: innerHTML für versch. HTML-Elemente auf Existenz prüfen

  Alt 8. Okt 2012, 09:39
Push

(ich habe noch Hoffnung, da mir dieses Problem nicht zu abwegig erscheint )
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

AW: TWebBrowser: innerHTML für versch. HTML-Elemente auf Existenz prüfen

  Alt 8. Okt 2012, 10:05
Das Element hat doch sicher einen Namen wie z.B. form, script, div,...
Du bräuchtest nun eine Liste aller Elementnamen sowie die Info, ob Unterelemente erlaubt sind.
HTML-Elementreferenz

Das von dir beschriebene Vorgehen quasi "blind" bestehende Elemente zu verändern, erscheint mir doch ziemlich zweifelhaft.
Es hängt ja immer vom Element ab, welche Kindelemente möglich sind und was überhaupt Sinn macht.
Also muss man zuerst den Elementnamen anschauen und dann entscheiden, ob und welche Kindelemente erzeugt werden sollen.
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#4

AW: TWebBrowser: innerHTML für versch. HTML-Elemente auf Existenz prüfen

  Alt 8. Okt 2012, 10:25
Ok, das wäre auch eine Möglichkeit, wobei ich natürlich dann eine Elementenliste vorhalten und pflegen müsste, aber ok. Danke jedenfalls...

Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."

Geändert von Caps ( 8. Okt 2012 um 12:22 Uhr) Grund: Offene Frage geschlossen
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#5

AW: TWebBrowser: innerHTML für versch. HTML-Elemente auf Existenz prüfen

  Alt 12. Okt 2012, 17:26
Falls jemanden interessiert, wie eine mögliche Lösung ohne Vorhalten einer HTML-Elementenliste aussieht, es funktioniert u.a. folgendermaßen:

Delphi-Quellcode:
var
   element: IHTMLElement; // hat nicht "canHaveChildren"
   element2: IHTMLElement2; // hat nicht "id"

begin
element := {<Element über "id" zuweisen>};

if supports(element, IHTMLElement2, element2) then
   begin
   if element2.canHaveChildren then
      begin
      // element2.innerHTML lesen/ schreiben
      end;
   end;

end;
Damit funktioniert der geschilderte Fall:
- Ein DOM-Element per id finden
- Wenn es innerHTML besitzt etwas hineinschreiben (z.B. einen HTML-Kommentar, der geht immer)
- Wirft keine NotSupported-Exception, geht also auch im Debugger

Mein Anwendungsfall:
- Laden des DOM-Baumes in eine TreeView
- Anklicken eines Baumknotens
- sofortiges Übernehmen von eingetipptem Text aus einem Memo in das innerHTML des DOM-Elementes

Grüße
Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz