SOFTSOUL: Как узнать загрузился ли css файл
Форум веб дизайна - разработка и создание сайтов, сделать сайт, раскрутка сайта! Форум веб разработчиков дизайн студии SOFTSOUL - общение профессиональных программистов, дизайнеров и веб-промоутеров! Работа - как найти работу за рубежом! Отдых в Крыму и Недвижимость в Крыму! > Форумы веб-разработчиков сайтов > Веб программирование на Java Script и Action Script
Alligator
Если идет динамическая генерация css файла, то иногда необходимо узнать загрузился ли он или нет

В ие все просто, работает и onload и onreadystatechange.

Проблема с мазилой (ну и сафари тоже).

Чтож, парился парился, искал искал, потом осенило ))))

Расписывать не буду, думаю что этим вопросом могут заинтересоваться люди знающие JS не поверхностно, но если такие будут тогда пишите, напишу более полный вариант, а для опытных будет и так понятно

вот от чего следует отператься

CODE
setTimeout(function() {if (document.styleSheets[0]!=0) alert(document.styleSheets[0].href)}, 0)


Для лисы хватит просто одного таймаута, список стильщетов ненужен
Для Сафари нужен список, и поэтапное сравнение хрефов, до тех пор, пока ненайдется искомый хреф узнаваемого css
Весь этот геморой будет работать только по одной прогерам браузеров извесной причине wink.gif
Alligator
За рание скажу что преследую цель узнать загрузился ли 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
Функцию переделал из метода класса, и отдельно не тестил, кто то может сам поправит, кто то найдет "непоправимые" ошибки, пишите будем разбираться
Индекс цитирования Дизайн студия SOFTSOUL www.softsoul.com Крым купить недвижимость, продать недвижимость, дома, дачи, эллинги, отели. Покупка недвижимости на южном берегу Крыма! Крым Отдых в Крыму - частный сектор, пансионаты, санатории, гостинницы, эллинги, дачи, виллы на южном берегу Крыма! Студия веб дизайна Сделать сайт
Студия веб дизайна SOFTSOUL. CMS, CMR, система управления  сайтом и контентом!  Крымская дизайн студия AzureAit - оригинальный дизайн Вашего сайта! Раскрутка сайта! Самые эффективная раскрутка сайтов. Раскрутка сайта навсегда! Продвижение сайта на первые места поисковых систем!  Отдых в Крыму! Санатории, пансионаты, частный сектор... Покупка недвижимости в Крыму, качественная аренда жилья, лучшие элитные коттеджи и виллы Крыма.