Вот такой способ «старой школы», который, надеюсь, работает во всех браузерах. Теоретически, вы бы использовали setAttribute
, к сожалению IE6 не поддерживает его последовательно.
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);
}
В этом примере проверяется, был ли добавлен CSS, поэтому он добавляет его только один раз.
Поместите этот код в javascript-файл, попросите конечного пользователя просто включить javascript и убедитесь, что путь к CSS является абсолютным, поэтому он загружается с ваших серверов.
VanillaJS
Вот пример, который использует простой JavaScript, чтобы ввести ссылку CSS в head
элемент на основе имени файла части 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>
Вставьте код непосредственно перед закрытием head
и CSS будет загружен до отображения страницы. Использование внешнего файла JavaScript (.js
) приведет к появлению Flash неровного содержимого (FOUC).
Там также вопрос о том, JQuery http://stackoverflow.com/questions/2685614/load-external-css-file-like -scripts-in-jquery-which-is-compatible-in-ie-также – jcubic