objMihail » 2009-09-03 21:12:25

У меня на событие body.onload срабатывает некоторый скрипт на страницах и нужно, чтобы он срабатывал как можно быстрее, но дело в том, что это событие ожидает загрузки счетчика, который иногда и секунд по 10 загружается. Выглядит в результате всё очень плохо.

Подскажите пожалуйста, реально ли так сделать средствами JS, html, чтобы счетчик загружался уже после срабатывания body.onload? Может можно как-нибудь инициировать его загрузку из конца метода-обработчика этого события?

Я пробовал innerHTML использовать таким образом, но он не выполняет скрипты, а только html. Можно, конечно, использовать его как-то и для скриптов, разными нестандартными путями, но получится совсем сложно и я не уверен будет ли статистика вообще работать после этого.

Admin » 2009-09-05 08:58:27

Например, Вы можете код счетчика разместить в JS-функции, в которой разместите сначала Ваш скрипт, а затем скрипт счетчика.

objMihail » 2009-09-08 20:57:30

Спасибо, попробовал. Но всё портит document.write в коде счетчика - уничтожает всё содержимое страницы и на ней остаётся только счетчик.
Да и в коде счетчика имеется не только скрипт, а и html, его приходится удалять. Вот, что я вставляю в конец своего скрипта. Без символов комментариев это это код невидимого счетчика полученный с вашего сайта:

Код:

//<!-- InetLog -->
//<script language="javascript">
i=Math.random();w=screen.width;h=screen.height;
clr=screen.colorDepth;
if(navigator.cookieEnabled) ck = "Y"; else ck = "N";
document.write('<a href="http://inetlog.ru/" target="_top"><img width=1 height=1 src="http://inetlog.ru/counter/?i='+i+'&cid=100&r='+escape(document.referrer)+'&sid=4232&ck='+ck+'&res='+w+'x'+h+'&clr='+clr+'&pg='+escape(window.location.href)+'" alt="InetLog.ru - статистика сайта" border=0></a>')
//</scr ipt><a href="http://inetlog.ru" title="статистика"><img border=0 width=1 height=1 src="http://inetlog.ru/img/del.gif" alt="статистика"></a>
//<!-- /InetLog -->

Может, вы что-то другое имели ввиду?

Admin » 2009-09-09 15:22:08

Разместите код счетчика в конец Вашего скрипта.
document.write в коде счетчика не должен ничего уничтожать.

objMihail » 2009-09-10 03:16:34

Вот я http://gerontology-explorer.narod.ru/test.htm сделал такой страницы - там должно быть слово "Текст", а после выполнения кода счетчика его там нет :)
Вот код:

Код:

<html>

    <head>
    
        <script language=javascript>
    
            // Вызывается из  body onload.
            function OnLoadEx()
            {
                // Мой код.
    
                // Код счетчика.
                    //<!-- InetLog -->
                    //<script language="javascript">
                    i=Math.random();w=screen.width;h=screen.height;
                    clr=screen.colorDepth;
                    if(navigator.cookieEnabled) ck = "Y"; else ck = "N";
                    document.write('<a href="http://inetlog.ru/" target="_top"><img width=1 height=1 src="http://inetlog.ru/counter/?i='+i+'&cid=100&r='+escape(document.referrer)+'&sid=4232&ck='+ck+'&res='+w+'x'+h+'&clr='+clr+'&pg='+escape(window.location.href)+'" alt="InetLog.ru - статистика сайта" border=0></a>')
                    //</scr ipt><a href="http://inetlog.ru" title="статистика"><img border=0 width=1 height=1 src="http://inetlog.ru/img/del.gif" alt="статистика"></a>
                    //<!-- /InetLog -->
            }
        </script>
    
    </head>
    
    <body onload="OnLoadEx()">
    
        <p>Текст</p>
    
    </body>

</html>
Admin » 2009-09-10 11:30:48

objMihail
Действительно, onload - имеет более высокий приоритет по выводу содержимого document.
А что Вам мешает обойтись без onload? Для каких целей используется скрипт?

Спрашиваю потому, что рассматриваю возможность разместить скрипт в теле или в заголовке страницы.

Или же можно модифицировать код счетчика, чтобы он корректно отрабатывал в onload.
Например,


    createCounter: function() {
        if(!this.counter) {
            var self = this;
            this.counter = document.createElement('div');

            document.body.appendChild(this.counter);

            this.counter.innerHTML = 'код счетчика';
        };
        return this.counter;
    }

objMihail » 2009-09-17 08:39:19

Сделал код счетчика полностью на appendChild'ах, всё работает прекрасно. Спасибо за подсказки.