jQuery - подгрузка html со скриптами
Столкнулся со следующей проблемой: при подгрузке html содержащего скрипты, эти скрипты не выполняются.
$.ajax( { dataType: "html", url: "/loader/loader.php", success: function(code) { $(code).appendTo(elem); } } ); Со стороны сервера выдается что-то вроде этого: <!-- Comment --> <script src="script1.js"></script> <!-- /Comment --> т.е. html со скриптами, и заголовок естесвенно: header('Content-Type: text/html; charset=UTF-8'); Но вот беда - подгружаемый скрипт не выполняется. Его код: document.write('<script type="text/javascript" src="http://domain.com/jscript2.js"></script>'); Через файербаг видно, что содержимое elem-контейнера меняется - видны комменты, виден <script></script>, но в списке скриптов пусто - jscript1.js не попал в DOM. Если использовать следующую конструкцию: $(elem).html(code); то после аякс-запроса, в DOM виден только коммент. Конструкция <script></script> отсутствует, но загруженный скрипт есть в списке файербага - script1.js, но вот второго - script2.js( script1.js его-то как раз и загружает) нет. Т.е. что нужно: загружается страница, скрипт-загрузчик загружает script1.js, окруженный неким html, этот скрипт загружает script2.js. Вроде как каскадная загрузка скриптов в окружении html - предыдущий скрипт грузит последующие, отягощенные мусором html-окружения. Как реализовать еще можно такой вариант? Или что поправить в моем? |
document.write('<script type="text/javascript" src="http://domain.com/jscript2.js"></script>'); плохая идея http://learn.javascript.ru/eval |
Понимаю, что плохая, но содержимое ответа сервера на аякс-запрос может быть любым - чистый html, html со скриптами и тд - заранее неизвестно, что именно будет загружено и в каком виде - нужно то, что даст сервер, поместить в контейнер, если будут скрипты, то они должны выполниться.
Как заставить все это нормально встроиться в DOM и запустить скрипты, если они будут? |
Как обойти document.write()?
Судя по всему document.write() выполняется только во время загрузки страницы. Мне же надо подгружать скрипты содержащие такую конструкцию в произвольный момент времени. Повлиять на получаемые с сервера данные нельзя - это рекламные блоки так грузятся. |
Margarita, причем тут eval?
|
sidorka, jQuery.getScript()
|
Еще раз по порядку:
1. Встроенный в страницу загрузчик по готовности DOM подгружает первый скрипт. 2. Первый скрипт содержит document.write(), который должен добавить еще один скрипт. 3. Загружается и выполняется второй скрипт. Вот как раз на втором этапе и выходит косяк - скрипт грузится, но отказывается работать, т.к. страница уже загружена и DOM доступен - document.write() работать не будет уже. Единственное что приходит в голову - это загружать и парсить этот второй скрипт непосредственно на стороне клиента, чтобы обойти document.write(). Может еще какие варианты попроще есть? getScript работает как надо - я пробовал, но это не то. Вся проблема в способе загрузки конечного скрипта - через document.write(). |
Цитата:
2. грузить в iframe 3. парсить и eval'ить |
1. Не могу - скрипты сторонние, со стороннего сервера.
2. Не могу - запрещено фреймами пользоваться. 3. Остается только это. Нашел что-то похожее - LazyAdLoader, но еще не пробовал. Там вроде переопределяют как раз document.write на свой обработчик. |
Цитата:
<script type="text/javascript" src="http://domain.com/jscript2.js"></script> Вродь и eval'ить тогда незачем. |
Часовой пояс GMT +3, время: 12:30. |