
25.07.2008, 10:49
|
 |
Профессор
|
|
Регистрация: 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.
Что делать? Возможно вообще с другой стороны подойти?
|
|

25.07.2008, 12:21
|
Флудер
|
|
Регистрация: 25.07.2008
Сообщений: 1,271
|
|
Бери и подключай скрипты отдельно в хэд страницы... Динамически, естественно...
|
|

25.07.2008, 13:05
|
 |
Профессор
|
|
Регистрация: 24.09.2007
Сообщений: 165
|
|
Сообщение от ZoNT
|
Бери и подключай скрипты отдельно в хэд страницы... Динамически, естественно...
|
а можно поподробнее? у меня просто была подобная проблема, через AJAX и innerHTML скрипт не подключается, т.е. его надо отдельно подгружать.
Или хотя бы скажите, где искать решение)
__________________
После каждой девятки все снова с нуля,
Все снова с нуля, но не сначала...
|
|

25.07.2008, 13:06
|
Флудер
|
|
Регистрация: 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);
|
|

25.07.2008, 13:30
|
 |
Профессор
|
|
Регистрация: 06.05.2008
Сообщений: 765
|
|
Не, основная беда в том, что IE не находит скрипт-элементы, если они были вставлены через innerHTML.
1. Беру html с сервера
2. Вставляю html через innerHTML в блок
3. Проверяю блок на наличие script (getElementsByTagName('script')
4. Найденные скрипты вставляю
В пункте 3. IE не находит script-элементы.
|
|

25.07.2008, 13:38
|
Флудер
|
|
Регистрация: 25.07.2008
Сообщений: 1,271
|
|
правильно, getElementsByTagName ищет узлы в дереве. А узлов нету (если бы были - они бы и так выполнились).
Надо распарсивать плэйн-текст...
|
|

25.07.2008, 13:38
|
 |
Профессор
|
|
Регистрация: 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>"
не приведет ни к чему. ни один оператор не выполнится... (п.с. если эту функцию вызвать после полной загрузки страницы...)
__________________
После каждой девятки все снова с нуля,
Все снова с нуля, но не сначала...
|
|

25.07.2008, 13:39
|
Флудер
|
|
Регистрация: 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.
|
|

25.07.2008, 13:40
|
 |
Профессор
|
|
Регистрация: 24.09.2007
Сообщений: 165
|
|
Сообщение от ZoNT
|
Намного проще подключать скрипты отдельно, а не совать в кучу с контентом...
|
а если в контенте (возращаемом по запросу) есть скрипт? как его выделить и вставить отдельно, если основная программа (страница) не знает какой скрипт (и будет ли он) в возращаемом контенте 
__________________
После каждой девятки все снова с нуля,
Все снова с нуля, но не сначала...
|
|

25.07.2008, 13:46
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от Phoenix
|
как его выделить и вставить отдельно
|
Выдрать регулярками и выполнить eval'ом.
|
|
|
|