Динамическое добавление скрипта

mastrelelik

Новичок
Задача:
есть набор превью картинок, при нажатии на картинку появляется в окно с полным размером. И под фотографией нужно поставить сервис "поделиться".

Пытаюсь поставить сервис addthis, и он отображается только при первом клике на любую картинку, в дальнейшем, сервис отображается в нерабочем виде.
Когда таким же методом подключаю аналогичный сервис (yashare), то все прекрасно работает (но yashare не устраивает). Может есть иной способ достижения цели? При открытии окна добавляю див и тег скрипт, а при закрытии очищаю див и убираю тег скрипт.

Чтобы сервис addthis запоминал для каждой большой картинки статистику, меняю урл в браузере при появлении окошка с большой картинкой.

function ShowLike(id)
{
// сначала добавляю служебный див, в который затем скрипт размещает свои кнопки
document.getElementById(id).innerHTML='<div class="addthis_toolbox addthis_default_style"><a class="addthis_button_preferred_1"></a><a class="addthis_button_compact"></a><a class="addthis_counter addthis_bubble_style"></a></div>';
var po = document.createElement("script");
po.type = "text/javascript";
po.async = true;
po.src = "http://s7.addthis.com/js/300/addthis_widget.js#pubid=ra-4eed00471e2e3c9a";
document.getElementById(id).appendChild(po);
}

function HideLike(id)
{
var myNode = document.getElementById(id);
while(myNode.firstChild != null) myNode.removeChild(myNode.firstChild);
document.getElementById(id).innerHTML="";
}
 
Последнее редактирование:

evgeshonok

Новичок
Ты не подумал, что при каждом вызове функции ShowLike() ты добавляешь еще одну копию скрипта?
 

evgeshonok

Новичок
mastrelelik
Просто вынеси этот скрипт из функции и все заработает. То есть, подключи его в начале и забудь о нем.
А в твоем случае, мало того, что ты его подключаешь каждый раз, так и еще он не знает про существующие элементы. Пример: попробуй подключи библиотеку jQuery в конце страницы, перед </body>, когда вся твоя функциональность подключена вообще на самом верху внутри <head>.
 

mastrelelik

Новичок
В том то и дело, что подключая один раз мы получим статистику лайков одинаковую для всех больших картинок. А нужно чтоб для каждого урла (читай большой картинки) информация о количестве лайков была собственная, для этого и надо постоянно передергивать подключение этого скрипта.
 
Последнее редактирование:

evgeshonok

Новичок
function HideLike(id)
{
var myNode = document.getElementById(id);
while(myNode.firstChild != null) myNode.removeChild(myNode.firstChild);
document.getElementById(id).innerHTML="";
}
Вот тут удаляй скрипт, который ты клеишь к дому в этой функции - function ShowLike(id).
Сам же сказал, что для каждой картинки скрипт должен быть запущен отдельно.
 

mastrelelik

Новичок
Вот тут удаляй скрипт, который ты клеишь к дому в этой функции - function ShowLike(id).
Сам же сказал, что для каждой картинки скрипт должен быть запущен отдельно.
Так я и удаляю, но только попробовал в ShowLike - результат тот же, не работает.
if (flag==1) document.getElementsByTagName("head")[0].removeChild(po);
 

evgeshonok

Новичок
HTML:
<script>
  var po = document.createElement("script"); //смотри название переменной
  po.type = "text/javascript";
  po.async = true;
  po.src = "http://s7.addthis.com/js/300/addthis_widget.js#pubid=ra-4eed00471e2e3c9a";
  if (flag==1) document.getElementsByTagName("head")[0].removeChild(po); //хоп, удаляем скрипт, которого даже нет в доме
  document.getElementsByTagName("head")[0].appendChild(po)
  flag=1;
</script>
Ты кадр.
Присоединяй скрипт к окну, которое открывается. Когда ты его закроешь, то это содержимое удалится из DOM.
"appendChild(po)" - вот это делай, но не к "head" а к твоему окну.
 

mastrelelik

Новичок
"Присоединяй скрипт к окну, которое открывается"
Дело в том, что окно представляет собой див, который скрыт, и я всего лишь его отображаю либо скрываю, т.е. никакое новое окно физически не появляется и не исчезает.
 
Последнее редактирование:
Сверху