Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.07.2008, 10:49
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

<script> через Ajax
Задача в следующем:
С сервера приходит html в xml'е, я его подключаю через innerHTML к нужному диву.
В этом html с сервера могут попадаться <script></script>. Т.к. они не выполняются, приходится извращаться, примерно так:
<head>
</head>
<body>
<script type="text/javascript">
<!--
function $(_id) {
	return document.getElementById(_id);
}
var text = '<script type="text/javascript">function _$(_id){$(_id).parentNode.removeChild($(_id));}</script><script language="javascript" type="text/javascript" src="file1.js"></script><script type="text/javascript" src="file2.js"></script>';
-->
</script>
<div id='test'></div>
<script type="text/javascript">
<!--
	var _div = $('test');
	_div.innerHTML = text;
	var _arr = _div.getElementsByTagName('script');
	
	alert(_arr.length);
-->
</script>
<body>
</html>


Подводя итоги, во всех браузерах кроме IE элементы script находятся в div'е куда мы засунули innerHTML.

Что делать? Возможно вообще с другой стороны подойти?
Ответить с цитированием
  #2 (permalink)  
Старый 25.07.2008, 12:21
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

Бери и подключай скрипты отдельно в хэд страницы... Динамически, естественно...
Ответить с цитированием
  #3 (permalink)  
Старый 25.07.2008, 13:05
Аватар для Phoenix
Профессор
Отправить личное сообщение для Phoenix Посмотреть профиль Найти все сообщения от Phoenix
 
Регистрация: 24.09.2007
Сообщений: 165

Сообщение от ZoNT Посмотреть сообщение
Бери и подключай скрипты отдельно в хэд страницы... Динамически, естественно...
а можно поподробнее? у меня просто была подобная проблема, через AJAX и innerHTML скрипт не подключается, т.е. его надо отдельно подгружать.
Или хотя бы скажите, где искать решение)
__________________
После каждой девятки все снова с нуля,
Все снова с нуля, но не сначала...
Ответить с цитированием
  #4 (permalink)  
Старый 25.07.2008, 13:06
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

var head = document.getElementsByTagName('head')[0];
var script = CreateScript();
script.setAttribute('type', 'text/javascript');
script.setAttribute('src', 'path.js');
head.insertBefore(script, head.firstChild);
Ответить с цитированием
  #5 (permalink)  
Старый 25.07.2008, 13:30
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

Не, основная беда в том, что IE не находит скрипт-элементы, если они были вставлены через innerHTML.

1. Беру html с сервера
2. Вставляю html через innerHTML в блок
3. Проверяю блок на наличие script (getElementsByTagName('script')
4. Найденные скрипты вставляю

В пункте 3. IE не находит script-элементы.
Ответить с цитированием
  #6 (permalink)  
Старый 25.07.2008, 13:38
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

правильно, getElementsByTagName ищет узлы в дереве. А узлов нету (если бы были - они бы и так выполнились).
Надо распарсивать плэйн-текст...
Ответить с цитированием
  #7 (permalink)  
Старый 25.07.2008, 13:38
Аватар для Phoenix
Профессор
Отправить личное сообщение для Phoenix Посмотреть профиль Найти все сообщения от Phoenix
 
Регистрация: 24.09.2007
Сообщений: 165

хм, все равно не то... допустим если это возращается по AJAX запросу, то этот код не выполнится... т.к. он будет не загружен изначально.

elem.innerHTML="
<script>
var head = document.getElementsByTagName('head')[0];
var script = CreateScript();
script.setAttribute('type', 'text/javascript');
script.setAttribute('src', 'path.js');
head.insertBefore(script, head.firstChild);
</script>"


не приведет ни к чему. ни один оператор не выполнится... (п.с. если эту функцию вызвать после полной загрузки страницы...)
__________________
После каждой девятки все снова с нуля,
Все снова с нуля, но не сначала...
Ответить с цитированием
  #8 (permalink)  
Старый 25.07.2008, 13:39
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

Намного проще подключать скрипты отдельно, а не совать в кучу с контентом...

Сообщение от Phoenix Посмотреть сообщение
хм, все равно не то... допустим если это возращается по AJAX запросу, то этот код не выполнится... т.к. он будет не загружен изначально.

elem.innerHTML="
<script>
var head = document.getElementsByTagName('head')[0];
var script = CreateScript();
script.setAttribute('type', 'text/javascript');
script.setAttribute('src', 'path.js');
head.insertBefore(script, head.firstChild);
</script>"

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

Сообщение от ZoNT Посмотреть сообщение
Намного проще подключать скрипты отдельно, а не совать в кучу с контентом...
!!

Последний раз редактировалось Андрей Параничев, 25.07.2008 в 17:48.
Ответить с цитированием
  #9 (permalink)  
Старый 25.07.2008, 13:40
Аватар для Phoenix
Профессор
Отправить личное сообщение для Phoenix Посмотреть профиль Найти все сообщения от Phoenix
 
Регистрация: 24.09.2007
Сообщений: 165

Сообщение от ZoNT Посмотреть сообщение
Намного проще подключать скрипты отдельно, а не совать в кучу с контентом...
а если в контенте (возращаемом по запросу) есть скрипт? как его выделить и вставить отдельно, если основная программа (страница) не знает какой скрипт (и будет ли он) в возращаемом контенте
__________________
После каждой девятки все снова с нуля,
Все снова с нуля, но не сначала...
Ответить с цитированием
  #10 (permalink)  
Старый 25.07.2008, 13:46
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Phoenix
как его выделить и вставить отдельно
Выдрать регулярками и выполнить eval'ом.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кодировка при использовании Ajax Nichloas AJAX и COMET 9 17.09.2009 16:06
Динамическое клонирование поля и AJAX supercelt AJAX и COMET 6 02.09.2008 11:27
XMLHTTPRequest передача имя через POST dds AJAX и COMET 0 14.08.2008 14:44
Просмотр передаваемых данных через AJAX Гость AJAX и COMET 3 04.08.2008 14:34
AJAX и БД SunYang AJAX и COMET 3 06.06.2008 22:44