я пытаюсь присоединить обработчик событий к событию загрузки тега link, выполнить некоторый код после того, как таблица стилей загрузилась.
new_element = document.createElement('link');
new_element.type = 'text/css';
new_element.rel = 'stylesheet';
new_element.href = 'http://domain.tld/file.css';
new_element.addEventListener('load', function() { alert('foo'); }, false);
document.getElementsByTagName('head')[0].appendChild(new_element)
я попробовал onreadystatechange также
new_element.onreadystatechange = function() { alert('foo'); }
к сожалению, никакой подход не приводит к инициированному предупреждению.. Кроме того, new_element.onload является пустым после регистрации обработчика для события 'загрузки' с addEventListener.. это нормально?
спасибо, andrew
PS: я не могу использовать платформу в решении этого
Для таблиц стилей CSS (не элементов LINK в целом) я использую ручной интервал, тыкая на длину правил. Это работает кроссбраузерно (AFAIT).
try {
if ( cssStylesheet.sheet && cssStylesheet.sheet.cssRules.length > 0 )
cssLoaded = 1;
else if ( cssStylesheet.styleSheet && cssStylesheet.styleSheet.cssText.length > 0 )
cssLoaded = 1;
else if ( cssStylesheet.innerHTML && cssStylesheet.innerHTML.length > 0 )
cssLoaded = 1;
}
catch(ex){}
В приведенном выше коде cssStylesheet является DOMElement.
Даже если вы добавите встроенный:
<link rel="stylesheet" type="text/css" href="foo.css" onload="alert('xxx')"/>
Он не сработает в FireFox, поскольку не событие onload
для элементов link
. (Это будет работать в IE)
У href нет события загрузки, которое вам нужно для применения ваших материалов при загрузке самой страницы, например
window.onload = function(){
//code here
}
используйте функцию на этой странице: http://www.dustindiaz.com/top-ten-javascript/
, чтобы добавить событие в элемент body (в строке будет)
{{ 1}}