2012-03-29 11 views
2

Ich habe eine in a post on StackOverflow beschriebene Technik verwendet, um dynamisch eine CSS-Datei zum HEAD-Tag einer HTML-Seite (in JavaScript) hinzuzufügen. Die Methode, um zu überprüfen, ob die CSS-Datei vollständig geladen wurde (siehe den gleichen Beitrag) wird vom Autor als 'hässlich' beschrieben und meiner Meinung nach ist es ;-) another post schlägt vor, einen 'Lazy loader' zu verwenden (siehe die akzeptierte Antwort) in diesem Post), die Cross-Browser-Probleme berücksichtigt. Obwohl der Code gut aussieht, scheint er für die vorliegende Aufgabe ziemlich komplex zu sein.Wie kann man wissen, wann eine dynamisch geladene CSS-Datei vollständig geladen und aktiv ist?

Meine Frage ist: Mehr als ein Jahr nach dem zuletzt erwähnten Beitrag (und vielen Verbesserungen in den Browsertechniken) gibt es eine zuverlässige, browserübergreifende Möglichkeit zu prüfen, ob eine dynamisch geladene CSS-Datei bereit ist benutzen?

+0

Ein weiterer Punkt: Ich habe eine nicht-Ajax (nicht XHR) Methode bevorzugen würde und auch keine JavaScript-Bibliothek zu verwenden, es sei denn, es gibt keinen anderen Weg. – Jeroen

+0

Bedeutet dies, dass Sie keine älteren Browser unterstützen müssen? – PeeHaa

+0

Ich muss nur moderne Browser unterstützen. – Jeroen

Antwort

0

versuchen, etwas like this

(function() { 
    function cssLoader(url) { 
     var link = document.createElement("link"); 
     link.onload = function(){ 
      console.log('loaded'); 
     }; 
     link.setAttribute("rel", "stylesheet"); 
     link.setAttribute("type", "text/css"); 
     link.setAttribute("href", url); 
     document.getElementsByTagName("head")[0].appendChild(link) 
    } 

    cssLoader('http://jsfiddle.net/css/style.css'); 

}());​ 
+1

Ich habe versucht, die jsFiddle, aber es scheint nicht in Chrome (17) und IE 9 zu arbeiten. Ich glaube nicht, dass diese Browser das Onload-Ereignis auf einem (dynamischen) Link-Element tatsächlich unterstützen. Ich denke, zumindest IE braucht das Ereignis onreadystatechange. Der Lazy Loader, den ich in meiner Frage erwähnt habe (https://github.com/LukeTheDuke/Lazyloader/blob/master/lazyloader.js), benutzt sowohl onload als auch onreadystatechange. – Jeroen

Verwandte Themen