Lieber Mathias,
insgeheim hatte ich gehofft, dass Du hier mitliest, denn aus Deiner Doku hatte ich ja z.T. Anregungen genommen.
ich möchte den Inhalt einer CSS-Datei mittels JavaScript auslesen. Bisher missbrauche ich dazu einen XHR
[...]
Wieso ist das ein Missbrauch? Es dürfte die zuverlässigste Möglichkeit sein.
Es ist die zuverlässigste Möglichkeit, ja. Im FF 3.6 kamen dann jedesmal Fehlermeldungen über ein nicht-wohlgeformtes Dokument, was nicht weiter überrascht. Die Fehlermeldungen mindern aber die Funktionalität in keiner Weise, sodass die Meldungen eher ein kosmetisches Problem sind. Diese Fehlermeldungen aber zu unterdrücken, war unter anderem meine Motivation für einen nicht-XHR-basierten Ansatz.
Die Lösung dort ist doch ziemlich simpel und hat mit Mootools nichts zu tun:
//Everyone else's onload eventing.
else {
(function(){
try {
element.sheet.cssRule;
} catch(e){
setTimeout(arguments.callee, 20);
return;
};
progress();
})();
}
Also mittels Timeout prüfen, ob das sheet-Objekt verfügbar ist, oder nicht. Etwas ähnliches hatte ich ja auch schon angedacht.
> Das ist vom Ansatz brauchbar,
Da könnte ich Dir zustimmen, wenn es XHR nicht gäbe.
> nur das Browser-Sniffing ist unschön. Dummerweise kann man hier auch kein Feature-Testing machen. Die übliche Methode zur Event-Unterstützung liefert falsche Werte.
Soviel zu "vom Ansatz her brauchbar"... schade.
> Daher würde ich einfach sämtliche Methoden verwenden (load, readystatechange, Polling). Eines davon wird eintreffen, das reicht ja.
So? Tut es das? Nach meinen Tests feuert ja eben \_keines\_ dieser Events (im FF3.6), sodass ich eben nach Events gesucht habe!
> ~~~javascript
(function poll () {
> if (link.sheet) {
> success();
> } else {
> setTimeout(poll, 50);
> }
> })();
Also auch bei Dir der Timer-gesteuerte Test auf das sheet-Objekt. Na fein. Damit bestätigst Du mir im Grunde, was ich schon befürchtet hatte: Es gibt kein verlässliches und in allen Browsern unterstütztes Event, das ich heranziehen könnte.
Vielleicht ist es ja nicht dasselbe, ob ich nun einfach
linkElement.onerror=function(){}
notiere, oder ob ich wie in Molilys Doku angeraten den Weg mit addEventListener geheDoch, das dürfte i.d.R. dasselbe Resultat haben, wenn man nur einen Handler hat.
Und schon wieder etwas bestätigt bekommen - prima!
Mathias, Dir - wieder einmal - ganz herzlichen Dank für Deine umfassende Hilfe und Klärung der Sachverhalte! Möge dieser Thread das Archiv bereichern, wie er mich bereichert hat: Nun weiß ich die handfesten Gründe, warum ich bei meinem XHR-gestützten Ansatz bleiben sollte.
Liebe Grüße,
Felix Riesterer.
ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)