Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   document.getElementsByTagName("style") ist unvollständig! (https://www.delphipraxis.net/97917-document-getelementsbytagname-style-ist-unvollstaendig.html)

FriFra 18. Aug 2007 17:09


document.getElementsByTagName("style") ist unvolls
 
Ich lese mit document.getElementsByTagName("style") alle Styles eines Dokumentes ein. Das Problem an der Sache ist, dass einige Style-Tags via Javascript erzeugt werden, diese Styles werden über diese Funktion nicht gefunden. Was kann ich tun um wirklich alle Styles auszulesen?

Code:
for(n=0;n<site.document.getElementsByTagName("style").length;n=n+1){
  //Styles auslesen
  if(tmp.indexOf("style"+String(n))==-1){
    tmp=tmp+";style"+String(n);
    NeuerEintrag = new Option("style"+String(n),site.document.getElementsByTagName("style")[n].innerHTML, false, true);

    document.getElementById("MyClasses").options[document.getElementById("MyClasses").length] = NeuerEintrag;
  }
}

quendolineDD 18. Aug 2007 18:54

Re: document.getElementsByTagName("style") ist unv
 
Inwiefern generierst du mit JavaScript die styles?

ich könnte dir vorab nur raten, nicht n=n+1 zu nehmen sondern n++ ... ist viel leichter zu lesen :)
Damit incrementierst du dann genauso.

Dann wollt ich mal fragen, warum du bei document.getelementbyid("myclasses") stehen hast? also wieso nennst du deine id's myclasses, wenn man eine id doch eh nur einmal auf einer html seite verwendet :?:

FriFra 18. Aug 2007 19:13

Re: document.getElementsByTagName("style") ist unv
 
Zitat:

Zitat von quendolineDD
Inwiefern generierst du mit JavaScript die styles?

Es gibt mehrere Tags, die wie folgt aussehen:
Code:
<script src="externesscript.js"></script>
Innerhalb dieser Scripts werden dann wieder Referenzen zu stylesheets erzeugt:
Code:
...
document.write("<style src=mystyle.css></style>");
...
Das funktioniert alles wunderbar, nur liefert document.getElementsByTagName("style") eben genau diese Styles NICHT, obwohl sie vorhanden sind. Das Auslesen der Styles passiert natürlich auch erst, nachdem die Seite vollständig geladen ist, also alle Styles schon angewendet sind.

Warum ich momentan welches Feld wie genannt habe ist erstmal uninteressant, weil ich ohnehin erst einmal dieses grundlegende Problem lösen muss.

S2B 18. Aug 2007 19:22

Re: document.getElementsByTagName("style") ist unv
 
Versuch mal document.createElement() bzw. document.createAttribute() anstatt dem document.write(). :wink:

FriFra 18. Aug 2007 19:27

Re: document.getElementsByTagName("style") ist unv
 
Zitat:

Zitat von S2B
Versuch mal document.createElement() bzw. document.createAttribute() anstatt dem document.write(). :wink:

Nein, das geht nicht... Die Seite, die das betrifft, kann/darf nicht verändert werden. Meine Frage war außerdem nicht, wie ich am elegantesten Styles erzeuge, sondern, warum getElementsByTagName nicht zuverlässig funktioniert, bzw. wie ich eben doch an ALLE Styles heran komme.
Mein Script läuft in einem anderen Frame, die Seite, die ich auslesen will/muss ist Tabu :? .

marabu 18. Aug 2007 20:31

Re: document.getElementsByTagName("style") ist unv
 
Hallo,

kannst du dir dein per JS verändertes HTML-Dokument mal anschauen? Stehen die STYLE Elemente da wo sie auch hingehören?

Hier noch eine alternative Vorgehensweise, die du sicher auch mit JS anwenden kannst: alle stylesheets auflisten

Grüße vom marabu

quendolineDD 19. Aug 2007 14:27

Re: document.getElementsByTagName("style") ist unv
 
Er verwendet externe CSS Dateien, wleche durch das JS implementiert werden.

Ich glaub ich hab da mal irgendwo ein Script gelesen, welches auch externe CSS durchgeht.
Mit deinem document... schaut er nur nach inline-css. Extern implementierte CSS Dateien werden damit nicht angeschaut.

Thorben77 19. Aug 2007 22:55

Re: document.getElementsByTagName("style") ist unv
 
Nur mal so dazwischengeworfen: Was ist das denn für eine Variante, ein Stylesheet einzubinden :shock: ?
Code:
<style src=mystyle.css></style>
Meinst du nicht eher sowas?
Code:
<link rel="stylesheet" type="text/css" href="Pfad/zur/CSS/Datei" />

<style type="text/css">
* {
  /* ... */
}
</style>
Zitat:

Zitat von FriFra
Zitat:

Zitat von S2B
Versuch mal document.createElement() bzw. document.createAttribute() anstatt dem document.write(). :wink:

Nein, das geht nicht... Die Seite, die das betrifft, kann/darf nicht verändert werden. [...] Mein Script läuft in einem anderen Frame, die Seite, die ich auslesen will/muss ist Tabu :? .

Durch document.write() wird die Seite auch verändert. Und die DOM-Methoden, die S2B vorgeschlagen hat, machen im Prinzip nichts anderes.

Wenn man die style-Elemente „ordnungsgemäß“ nach S2Bs Vorschlag dynamisch erzeugt, tauchen sie auch in dem Array auf, das document.getElementsByTagName("style") zurückgibt.

Wenn du aber keinen Zugriff auf die Seite hast und das nicht ändern kannst, siehts schlecht aus.

FriFra 20. Aug 2007 08:14

Re: document.getElementsByTagName("style") ist unv
 
Hallo zusammen....
Die alternative Methode aus Marabus Link hat soweit funktioniert, dass ich die URL des bettr. StyleSheets heraus gefunden habe und jetzt klappt der ertste Teil von dem was ich vor hatte ;)

Den ersten Teil habe ich jetzt geschafft :dancer: aber nun habe ich das nächste Problem: http://www.delphipraxis.net/internal...t.php?t=116678


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf