Как подгрузить CSS при помощи Prototype
Не часто это бывает нужно, но иногда приходится подгружать CSS джаваскриптом. Например нужно выдавать браузерам разные версии CSS. В этом туториале мы сделаем простую HTML страничку, где CSS стиль загрузится через 5 секунд после открытия страницы в браузере.
Для этого "чуда" мы используем JavaScript библиотеку Prototype, с которой особенно хорошо знакомы все Ruby On Rails программисты . Конечно можно сделать всё, что я собираюсь показать, и стандартным джаваскритом, без дополнительных библиотек, но Prototype я хотел использовать по двум причинам. Во первых с прототайпом программировать удобнее, во вторых я хотел попробовать новую версию прототайпа, с его новым DOM Builder-ом.
Итак приступим.
Вот наш HTML. Ничего особенного в нём нет. Обратите внимание, что нигде нету ссылки на CSS файл.
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
<html xmlns="http://www.w3.org/1999/xhtml">
-
<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
-
<title>CSS стиль подгружается при помощи Javascript библиотеки - Prototype</title>
-
<!-- Для туториала нужен Prototype 1.6.0 -->
-
<script type="text/javascript" charset="utf-8" src="prototype.js"></script>
-
</head>
-
<body id="mybody">
-
-
<h1>Привет, через 5 секунд мир станет ярче</h1>
-
CSS стиль подгружается при помощи Javascript библиотеки - Prototype.
-
</p>
-
-
</body>
-
</html>
А вот CSS который мы хотим загрузить через 5 секунд после открытия страницы. Этот стиль изменит цвет фона страницы на светло зелёный, или cucumber_shampoo.
-
#mybody {
-
background-color: #E1F5B0;
-
}
Для этого напишем набольшой скрипт, который мы поместим в HEAD.
-
<script type="text/javascript" charset="utf-8">
-
// Следим за загрузкой страницы
-
Event.observe(window, 'load', function()
-
{
-
// Ставим таймер на 5 секунд
-
setTimeout(function()
-
{
-
// Получаем элемент HEAD
-
var head = $$('head')[0];
-
// Создаём новый элемент LINK при помощи Prototype DOM-Builder
-
var css = new Element('link', {type: 'text/css', rel: 'stylesheet', href: 'dynamic.css', media: 'screen'});
-
// Добавим LINK в HEAD
-
head.insert(css);
-
}, 5000);
-
});
-
</script>
Готовый результат можно посмотреть по этому адресу. Хочу ещё раз обратить ваше внимание на то, что версия прототайпа, использованная в туториале - 1.6.0 Release Candidate. С версией 1.5.1.1 скрипт скорее всего работать не будет.
Кто напишет в комментариях самый короткий JavaScript, который делает тоже самое, но без таймера - тот молодец ![]()
1 Comment so far
Leave a reply
Что-то примерно так :
$(document).ready(function(){
$(’head’).append(’<link type=”text/css” rel=”stylesheet” href=”dynamic.css” media=”screen”);
});
Конечно, без прототипа, а с jQuery