За рание скажу что преследую цель узнать загрузился ли css когда он был добавлен динамически, а точнее исполнить код после его окончательной загрузки
после некоторого "оттачивания" получил вот такую функцию
Код
var isIE = (navigator.appName == "Microsoft Internet Explorer");
var CSS = [];
function addCss (href, onload)
{
var load = function () {
CSS[href] = true;
if (onload) onload();
};
if (CSS[href]) return;
link = document.createElement('LINK');
link.type = 'text/css';
link.rel = 'stylesheet';
link.href = href;
link = this.document.getElementsByTagName('head')[0].appendChild(link);
if (isIE) {addEvent(link, 'load', load)}
else {
(function () {
var sheets = document.styleSheets;
for (var i=0; i<sheets.length; i++) {
if (sheets[i].href == link.href){
try {
else {
sheets[i].cssRules[sheets[i].cssRules.length-1];
load();
return;
}
}
catch (e) {
return setTimeout(arguments.callee, 0);
}
}
};
setTimeout(arguments.callee, 0);
})()
}
}
В FF3 работать на данный момент не будет, тк почемуто в нем не читается .cssRules, выдает ошибку, возможно временный баг новой версии
если в CSS будет использоваться @import, возможна нееоректная работа функции.
Оригинальная функция addEvent() от Скота Эндрю
Код
function addEvent(elm, evType, fn, useCapture) {
if (elm.addEventListener) {
elm.addEventListener(evType, fn, useCapture);
return true;
}
else if (elm.attachEvent) {
var r = elm.attachEvent('on' + evType, fn);
return r;
}
else {
elm['on' + evType] = fn;
}
}
PS
Функцию переделал из метода класса, и отдельно не тестил, кто то может сам поправит, кто то найдет "непоправимые" ошибки, пишите будем разбираться