Oto sposób "starej szkoły", który, mam nadzieję, działa we wszystkich przeglądarkach. Teoretycznie użyłbyś setAttribute
, niestety IE6 nie obsługuje tego konsekwentnie.
var cssId = 'myCss'; // you could encode the css path itself to generate id..
if (!document.getElementById(cssId))
{
var head = document.getElementsByTagName('head')[0];
var link = document.createElement('link');
link.id = cssId;
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = 'http://website.com/css/stylesheet.css';
link.media = 'all';
head.appendChild(link);
}
Ten przykład sprawdza, czy CSS został już dodany, więc dodaje go tylko raz.
Umieść ten kod w pliku javascript, niech użytkownik końcowy po prostu umieści javascript i upewnij się, że ścieżka CSS jest absolutna, więc jest ładowana z twoich serwerów.
VanillaJS
Oto przykład, który używa zwykłego JavaScript wstrzyknąć link CSS do elementu head
opartą na części nazwy pliku adresu URL:
<script type="text/javascript">
var file = location.pathname.split("/").pop();
var link = document.createElement("link");
link.href = file.substr(0, file.lastIndexOf(".")) + ".css";
link.type = "text/css";
link.rel = "stylesheet";
link.media = "screen,print";
document.getElementsByTagName("head")[0].appendChild(link);
</script>
Wstawianie kodu tuż przed zamknięciem head
tag i CSS zostaną wczytane przed renderowaniem strony. Użycie zewnętrznego pliku JavaScript (.js
) spowoduje pojawienie się Flasha niezaszyfrowanych treści (FOUC).
Istnieje również pytanie o jQuery http://stackoverflow.com/questions/2685614/load-external-css-file-like -scripts-in-jquery-which-is-compatible-in-ie-also – jcubic