Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Вызов кода js-файла внутри div-тегов с заданным id (https://javascript.ru/forum/events/41346-vyzov-koda-js-fajjla-vnutri-div-tegov-s-zadannym-id.html)

samsebesufiy 09.09.2013 16:48

Вызов кода js-файла внутри div-тегов с заданным id
 
Здравствуйте

Есть код *.js, инициирующий показ баннера. Чтобы его загрузка не тормозила рендеринг страницы, хочу разместить в нужном месте div блок, а загрузку скрипта перенести в конец документа. Помогите связать div и скрипт, понимаю, что через getElementsByID, но сам допилить не могу.

danik.js 09.09.2013 16:59

document.getElementById('id').innerHTML = 'результат работы скрипта';

samsebesufiy 09.09.2013 17:11

Нужно вызвать именно скрипт, т.к. это ротатор. вот код
<script type='text/javascript'><!--//<![CDATA[
   var m3_u = (location.protocol=='https:'?'https://****/www/delivery/ajs.php':'http://***/www/delivery/ajs.php');
   var m3_r = Math.floor(Math.random()*99999999999);
   if (!document.MAX_used) document.MAX_used = ',';
   document.write ("<scr"+"ipt type='text/javascript' src='"+m3_u);
   document.write ("?zoneid=1");
   document.write ('&amp;cb=' + m3_r);
   if (document.MAX_used != ',') document.write ("&amp;exclude=" + document.MAX_used);
   document.write (document.charset ? '&amp;charset='+document.charset : (document.characterSet ? '&amp;charset='+document.characterSet : ''));
   document.write ("&amp;loc=" + escape(window.location));
   if (document.referrer) document.write ("&amp;referer=" + escape(document.referrer));
   if (document.context) document.write ("&context=" + escape(document.context));
   if (document.mmm_fo) document.write ("&amp;mmm_fo=1");
   document.write ("'><\/scr"+"ipt>");
//]]>--></script>

danik.js 09.09.2013 17:34

Создай скрипт черед DOM-API:
var script = document.createElement('script');
script.src = '//***/www/delivery/ajs.php';
document.getElementById('id').appendChild(script);

Вот только если скрипт использует document.write то будучи подгруженным асинхронно, затрет своим write() весь документ. В таком случае нельзя использовать DOM-API. Вместо этого можно обернуть исходный скрипт в скрытый элемент, и расположить ниже такой скрипт:
var placeholder = document.getElementById('placeholder');
var contentholder = document.getElementById('contentholder');
placeholder.parentNode.replaceChild(contentholder, placeholder);
contentholder.style.display = 'block';

samsebesufiy 09.09.2013 17:49

Спасибо, со скрытым элементом отлично работает.:)


Часовой пояс GMT +3, время: 12:24.