Einzelnen Beitrag anzeigen

Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

Klasse eines <body>-Tag im Webbrowser ändern

  Alt 31. Mär 2018, 21:05
Hallo!

Ich habe ein HTML-Dokument wie dieses:
Code:
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Test</title>
    <link href="dark.css" rel="stylesheet" type="text/css"/>
    <link href="light.css" rel="stylesheet" type="text/css"/>
    <style>
      body {
        border: none;
        margin: 0;
        padding: 0;
      }
    </style>
  </head>

  <body class="dark">
      Test
  </body>
</html>
Wie man sieht wird dem <body>-Tag direkt eine Klasse "dark" zugewiesen. Hier noch die beiden CSS-Dateien:
Code:
body.dark {
  color: #ffffff;
  background-color: #000000;
}
Code:
body.light {
  color: #000000;
  background-color: #ffffff;
}
(Das ist nur das Grundgerüst, deshalb wirkt das so banal)

Nun möchte ich zur Laufzeit das Body-Element holen und das Attribut "class" auf den Wert "light" ändern. Allerdings komme ich damit nicht so recht weiter:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Es: IHTMLElementCollection;
  E: IHTMLElement;
  Doc: IHtmlDocument3;
begin
  Webbrowser.Document.QueryInterface(IHtmlDocument3, Doc);
  Assert(Doc <> NIL);
  E:= (Webbrowser.Document AS IHTMLDocument2).body;
  if E <> NIL then begin
    E.setAttribute('className', 'light', EmptyParam);
  end;
end;
Die Variable E bleibt immer NIL (und ja, ReadyState passt, das Dokument ist fertig geladen). Hat jemand einen Tip wo ich den Fehler mache? Mit MSHTML-DOM habe ich eher selten zu tun...

Grüße
Cody
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat