Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.11.2012, 15:46
Новичок на форуме
Отправить личное сообщение для sidorka Посмотреть профиль Найти все сообщения от sidorka
 
Регистрация: 13.11.2012
Сообщений: 9

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-окружения.

Как реализовать еще можно такой вариант? Или что поправить в моем?

Последний раз редактировалось sidorka, 13.11.2012 в 16:37.
Ответить с цитированием
  #2 (permalink)  
Старый 13.11.2012, 16:54
Аватар для Margarita
Аспирант
Отправить личное сообщение для Margarita Посмотреть профиль Найти все сообщения от Margarita
 
Регистрация: 14.09.2012
Сообщений: 83

document.write('<script type="text/javascript" src="http://domain.com/jscript2.js"></script>');

плохая идея

http://learn.javascript.ru/eval
Ответить с цитированием
  #3 (permalink)  
Старый 13.11.2012, 17:12
Новичок на форуме
Отправить личное сообщение для sidorka Посмотреть профиль Найти все сообщения от sidorka
 
Регистрация: 13.11.2012
Сообщений: 9

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

Как заставить все это нормально встроиться в DOM и запустить скрипты, если они будут?

Последний раз редактировалось sidorka, 13.11.2012 в 19:38.
Ответить с цитированием
  #4 (permalink)  
Старый 13.11.2012, 23:17
Новичок на форуме
Отправить личное сообщение для sidorka Посмотреть профиль Найти все сообщения от sidorka
 
Регистрация: 13.11.2012
Сообщений: 9

Как обойти document.write()?

Судя по всему document.write() выполняется только во время загрузки страницы. Мне же надо подгружать скрипты содержащие такую конструкцию в произвольный момент времени. Повлиять на получаемые с сервера данные нельзя - это рекламные блоки так грузятся.
Ответить с цитированием
  #5 (permalink)  
Старый 13.11.2012, 23:26
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Margarita, причем тут eval?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #6 (permalink)  
Старый 13.11.2012, 23:27
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

sidorka, jQuery.getScript()
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #7 (permalink)  
Старый 13.11.2012, 23:42
Новичок на форуме
Отправить личное сообщение для sidorka Посмотреть профиль Найти все сообщения от sidorka
 
Регистрация: 13.11.2012
Сообщений: 9

Еще раз по порядку:
1. Встроенный в страницу загрузчик по готовности DOM подгружает первый скрипт.
2. Первый скрипт содержит document.write(), который должен добавить еще один скрипт.
3. Загружается и выполняется второй скрипт.

Вот как раз на втором этапе и выходит косяк - скрипт грузится, но отказывается работать, т.к. страница уже загружена и DOM доступен - document.write() работать не будет уже.

Единственное что приходит в голову - это загружать и парсить этот второй скрипт непосредственно на стороне клиента, чтобы обойти document.write().

Может еще какие варианты попроще есть?

getScript работает как надо - я пробовал, но это не то. Вся проблема в способе загрузки конечного скрипта - через document.write().
Ответить с цитированием
  #8 (permalink)  
Старый 14.11.2012, 13:15
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от sidorka
Может еще какие варианты попроще есть?
1. убрать из скрипта document.write()
2. грузить в iframe
3. парсить и eval'ить
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #9 (permalink)  
Старый 14.11.2012, 23:51
Новичок на форуме
Отправить личное сообщение для sidorka Посмотреть профиль Найти все сообщения от sidorka
 
Регистрация: 13.11.2012
Сообщений: 9

1. Не могу - скрипты сторонние, со стороннего сервера.
2. Не могу - запрещено фреймами пользоваться.
3. Остается только это.

Нашел что-то похожее - LazyAdLoader, но еще не пробовал. Там вроде переопределяют как раз document.write на свой обработчик.
Ответить с цитированием
  #10 (permalink)  
Старый 15.11.2012, 01:47
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от sidorka
document.write('<script type="text/javascript" src="http://domain.com/jscript2.js"></script>');
Конструкции такого вида в подгружаемом контенте парсить и преобразовывать к виду
<script type="text/javascript" src="http://domain.com/jscript2.js"></script>

Вродь и eval'ить тогда незачем.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка jQuery в html шаблон CaIIIKiH Общие вопросы Javascript 4 17.05.2012 17:26
jquery html и cp1251 bdfy1 Opera, Safari и др. 0 03.10.2011 15:34
редактор html или bb кодов на jquery gaserge Общие вопросы Javascript 15 28.08.2011 01:39
jQuery + thumbnails + html kewlman jQuery 0 28.03.2011 11:29
Jquery манипулятор html JIEXA jQuery 6 18.03.2010 21:55