Просмотр полной версии : Как отложить загрузку 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>
Почему-то данный способ у меня конфликтует с ЯндексДиректом. То показываются блоки ЯДа, а баннер не показывается, то - наоборот.
Можно ли как-то по-другому решить задачу или исправить/дополнить этот способ, чтобы он не конфликтовал с ЯДом?
Как сделать так, чтобы он подгружался после отрисовки страницы?
window.onload
Дмитрий_online
07.09.2009, 15:37
B~Vladi, спасибо, что ответили. Но не могли бы пошагово (как я выше) расписать, как все сделать. У меня почему-то не получалось добиться нужного эффекта, используя onload. А то рекламодатель не очень рад моим экспериментам и, особенно, неудачным попыткам...
Вы просите готовый скрипт с нуля.
Это работа, и за нее обычно платят деньги.
Для таких сообщений предназначен раздел форума "Работа" (http://javascript.ru/forum/job/).
Если вы все же хотите, чтобы вам помогли - приложите какие-то усилия сами и задавайте вопросы по ходу дела.
Дмитрий_online
07.09.2009, 16:19
Gvozd, я прошу поделиться решением (кусок кода), которое наверняка используется на собственных сайтах, а не писать скрипт с нуля.
А к чему собственно такие эксперементы?! Дали код - вставили куда надо. Зачем его перетыкать-то?!
Дмитрий_online
07.09.2009, 16:38
B~Vladi, не совсем понял вопрос. Но если Вы про код баннера, то он тормозит загрузку всей страницы, пока не загрузится сам.
он тормозит загрузку всей страницы, пока не загрузится сам.
Тогда напишите обработчик, примерно такой:
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. Баннер не перемещается на нужное место, а вставляется там, где код стоит (после баннера пояляется '; }).
Что я делаю не так?
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)
Строки так не переносят в 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'));
}
Теперь баннер не конфликтует с ЯДом, что очень приятно! Но что-то меня не оставляют мысли, что все сделано как-то через одно место. Можно ли сделать как-то элегантнее?
Во-первых, непонятно для чего скрипт выдерать из одного места и вставлять в другое?!
На самом деле все счётчики нужно выносить в пост-загрузку. Например, если вы один вынесли, а второй нет, то последний может затормозить событие 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, на мой взгляд, вы делаете абсолютно тоже самое - пересаживаете счетчик из одного места в другое
Откуда такие выводы?!:blink:
Этот скрипт создаёт скрипты и вставляет их в нужное место, а не перемещает.
mirra20012001
10.09.2009, 14:25
привет.. может быть попробывать загружать скрипт . спомощью AJAX.
а прицеплять спомощью обработчика. По крайне мере есть состояние 4.
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot