Вход

Просмотр полной версии : Как отложить загрузку javascript-баннера


Дмитрий_online
07.09.2009, 15:06
Имеется следующая проблема. Джаваскриптовый баннер частенько тормозит загрузку страницы. Как сделать так, чтобы он подгружался после отрисовки страницы?

Пользуюсь таким способом:

// В место, где баннер должен показываться
<div id="adv_place_1"></div>

// В место, когда можно начинать подгузку баннера
<div id="adv_block_1"><script language="javascript">Код баннер</script></div>

// Собственно делаем подстановку
<script type="text/javascript">document.getElementById('adv_place_1').appendChild (document.getElementById('adv_block_1'));</script>

Почему-то данный способ у меня конфликтует с ЯндексДиректом. То показываются блоки ЯДа, а баннер не показывается, то - наоборот.

Можно ли как-то по-другому решить задачу или исправить/дополнить этот способ, чтобы он не конфликтовал с ЯДом?

B~Vladi
07.09.2009, 15:08
Как сделать так, чтобы он подгружался после отрисовки страницы?
window.onload

Дмитрий_online
07.09.2009, 15:37
B~Vladi, спасибо, что ответили. Но не могли бы пошагово (как я выше) расписать, как все сделать. У меня почему-то не получалось добиться нужного эффекта, используя onload. А то рекламодатель не очень рад моим экспериментам и, особенно, неудачным попыткам...

Gvozd
07.09.2009, 16:03
Вы просите готовый скрипт с нуля.

Это работа, и за нее обычно платят деньги.
Для таких сообщений предназначен раздел форума "Работа" (http://javascript.ru/forum/job/).

Если вы все же хотите, чтобы вам помогли - приложите какие-то усилия сами и задавайте вопросы по ходу дела.

Дмитрий_online
07.09.2009, 16:19
Gvozd, я прошу поделиться решением (кусок кода), которое наверняка используется на собственных сайтах, а не писать скрипт с нуля.

B~Vladi
07.09.2009, 16:24
А к чему собственно такие эксперементы?! Дали код - вставили куда надо. Зачем его перетыкать-то?!

Дмитрий_online
07.09.2009, 16:38
B~Vladi, не совсем понял вопрос. Но если Вы про код баннера, то он тормозит загрузку всей страницы, пока не загрузится сам.

B~Vladi
07.09.2009, 16:41
он тормозит загрузку всей страницы, пока не загрузится сам.
Тогда напишите обработчик, примерно такой:
window.onload=function(){
document.getElementById('adv_place_1').innerHTML=' код вашего баннера';
}

Дмитрий_online
07.09.2009, 17:44
B~Vladi, вставляю в код страницы следующее:

<script type="text/javascript">
window.onload=function(){
document.getElementById('adv_place_1').innerHTML='<script language="javascript">AC_FL_RunContent = 0;</script>
<script src="http://***.ru/AC_RunActiveContent.js" language="javascript"></script>
<script language="javascript" type="text/javascript" src="http://***.ru/***.js"></script>';
}
</script>

В результате:
1. Баннер начинает загружаться, когда до него дошла очерь по коду (window.onload не работает);
2. Баннер не перемещается на нужное место, а вставляется там, где код стоит (после баннера пояляется '; }).

Что я делаю не так?

B~Vladi
07.09.2009, 17:59
window.onload не работает
Работает:)
Попробуйте его в хед засунуть и проверьте.
И попробуйте создать скрипты DOM-методами, может так у вас всё ок будет:
var js=document.createElement('script');
js.type='text/javascript';
js.src='http://***.ru/';
document.getElementById('adv_place_1').appendChild (js);
За подробностями - сюда (http://javascript.ru/tutorial/dom)

Octane
07.09.2009, 18:12
Строки так не переносят в JavaScript.

alexKniaz
07.09.2009, 19:31
Попытайтесь так
<script type="text/javascript">
window.onload=function(){
document.getElementById('adv_place_1').innerHTML='<script type="text/javascript">AC_FL_RunContent = 0;</'+'script>';
document.getElementById('adv_place_1').innerHTML+= '<script src="http://*.ru/AC_RunActiveContent.js" language="javascript"><'+'/script>';
document.getElementById('adv_place_1').innerHTML+= '<script language="javascript" type="text/javascript" src="http://*.ru/***.js"><'+'/script>';}</script>

Дмитрий_online
07.09.2009, 22:37
B~Vladi, создать скрипты DOM-методами у меня не получилось... За подробностями ходил по предложенной вами ссылке, но мне это что-то не особо помогло...
alexKniaz, попробовал, как вы предлагаете - баннер не показывается...

В результате чуть доработал свой код, добавив window.onload:

// Собственно делаем подстановку

window.onload=function(){
document.getElementById('adv_place_1').appendChild (document.getElementById('adv_block_1'));
}

Теперь баннер не конфликтует с ЯДом, что очень приятно! Но что-то меня не оставляют мысли, что все сделано как-то через одно место. Можно ли сделать как-то элегантнее?

B~Vladi
08.09.2009, 11:04
Во-первых, непонятно для чего скрипт выдерать из одного места и вставлять в другое?!
На самом деле все счётчики нужно выносить в пост-загрузку. Например, если вы один вынесли, а второй нет, то последний может затормозить событие onload, поэтому на него (событие) вешать не всегда хорошо. Пост-загрузка: перед закрывающимся тегом </body> ставим примерно такой код:
<script type="text/javascript">
var js=document.createElement('script');
js.src='counter.js'; // Устанавливаем путь для внешнего скрипта, если таковой нужен;
js.type='text/javascript'; // Установим тип скрипта (для правильности).
// Если в тело скипта необходимо вставить JS-код:
js.appendChild(document.createTextNode('AC_FL_RunC ontent = 0;')) // Добавляем JS-код.
document.getElementById('scriptPaste').appendChild (js); // И добавляем его в нужное нам место на странице.
</script>

И так со всеми счётчиками. После вставки - счётчики сами подгрузятся браузером. Для экономии можно оформить как отдельную функцию и подгружать нужные нам скрипты. Ещё можете посмотреть другой готовый вариант тут (http://javascript.ru/php/include).

Дмитрий_online
08.09.2009, 21:50
B~Vladi, на мой взгляд, вы делаете абсолютно тоже самое - пересаживаете счетчик из одного места в другое с той лишь разницей, что исходный скрипт вы переделываете под себя, я же вставляю его как он есть. Поправьте меня, если я не прав.

B~Vladi
09.09.2009, 11:02
B~Vladi, на мой взгляд, вы делаете абсолютно тоже самое - пересаживаете счетчик из одного места в другое
Откуда такие выводы?!:blink:

Этот скрипт создаёт скрипты и вставляет их в нужное место, а не перемещает.

mirra20012001
10.09.2009, 14:25
привет.. может быть попробывать загружать скрипт . спомощью AJAX.
а прицеплять спомощью обработчика. По крайне мере есть состояние 4.