Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi [TWebBrowser] Alle StyleSheets auflisten (https://www.delphipraxis.net/74794-%5Btwebbrowser%5D-alle-stylesheets-auflisten.html)

Daniel G 8. Aug 2006 19:55


[TWebBrowser] Alle StyleSheets auflisten
 
Hilfe. :mrgreen:

Ich enumeriere mit einem Codeschnipsel, den marabu mal geposted hat, alle StyleSheets in einem Dokument:

Delphi-Quellcode:
procedure SetSpecialCSS(WB: TWebBrowser);
var
  doc: IHTMLDocument2;
  cStyles: IHTMLStylesheetsCollection;
  i: integer;
  ss, vi: OleVariant;
begin
  doc := WB.Document as IHTMLDocument2;
  cStyles := doc.styleSheets; // no cast necessary
//Enumerate all StyleSheets
  for i := 0 to cStyles.length - 1 do begin
    vi := i;
    ss := cStyles.item(vi);  // no cast possible
    ShowMessage(ss.href);
  end;
end;
Für mich ist es wichtig, dass ich alle Stylesheets bekomme, da ich diese durch eigene, lokale ersetzen muss. Nun habe ich das Problem, dass mir der Code alle StyleSheets listet, allerdings nur bei denen die Adresse zurückgibt, die via HTML - Syntax eingebunden werden. Bei CSS - Syntax klappt das nicht.

Beispiel:

HTML - Syntax:
Code:
<link rel="stylesheet" href="./templates/DPClassicBlue/DPClassicBlue.css" type="text/css">
Rückgabewert:
Delphi-Quellcode:
'./templates/DPClassicBlue/DPClassicBlue.css'

CSS - Syntax
Code:
<style type="text/css"> @import url("./formIE.css"); </style
Rückgabewert
Delphi-Quellcode:
''

Es werden aber zwei definierte StyleSheets erkannt. Kennt jemand ein Workaround dafür?

Bernhard Geyer 8. Aug 2006 19:58

Re: [TWebBrowser] Alle StyleSheets auflisten
 
Ich ja auch klar wenn du den Namen des Interfaces betrachtest: IHTMLStylesheetsCollection :-)

Du könntest versuchen über das IHTMLDocument2-Interface dir alle style-Elemente geben zu lassen und diese selbst zu analysieren.

Daniel G 8. Aug 2006 20:04

Re: [TWebBrowser] Alle StyleSheets auflisten
 
Zitat:

Zitat von Bernhard Geyer
Ich ja auch klar wenn du den Namen des Interfaces betrachtest: IHTMLStylesheetsCollection :-)

Ja gut, wenn das der einzige Weg ist...

Aber ich finde es trotzdem merkwürdig, dass dann die Existenz beider StyleSheets trotz unterschiedlicher Syntax erkannt wird, gerade weil es sich um IHTMLStylesheetsCollection handelt... :gruebel:

Bernhard Geyer 9. Aug 2006 19:54

Re: [TWebBrowser] Alle StyleSheets auflisten
 
Das ist der IE. Schon mal versucht Word-HTML per IHTMLDocument2 zu analysieren?

Daniel G 9. Aug 2006 20:11

Re: [TWebBrowser] Alle StyleSheets auflisten
 
Ähh.... nein? Aber lass mich raten: Ein einziges Chaos?

Bernhard Geyer 9. Aug 2006 20:16

Re: [TWebBrowser] Alle StyleSheets auflisten
 
Bilder wurden zwar angezeigt aber per DOM nicht gefunden. Lag daran das Word-HTML so ziemlich jeden W3C-standard verletzt um möglichst nur vom IE darstellbar zu sein.

marabu 9. Aug 2006 20:48

Re: [TWebBrowser] Alle StyleSheets auflisten
 
Hallo Daniel,

Zitat:

Zitat von Daniel G
Für mich ist es wichtig, dass ich alle Stylesheets bekomme, ...

probiere es so:

Delphi-Quellcode:
procedure ExtractStyleSheets(sc: IHTMLStyleSheetsCollection; s: TStrings);
var
  i: Integer;
  v: OleVariant;
  u: iUnknown;
  ss: IHTMLStyleSheet;
begin
  with sc do
    for i := 0 to Pred(length) do
    begin
      v := i;
      u := item(v);
      if Succeeded(u.QueryInterface(IID_IHTMLStyleSheet, ss)) then
        if ss.href = ''
          then ExtractStyleSheets(ss.imports, s)
          else s.Add(ss.href);
    end;
end;
Grüße vom marabu

Daniel G 9. Aug 2006 21:09

Re: [TWebBrowser] Alle StyleSheets auflisten
 
Funktioniert wunderbar. Danke dir :love:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:27 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