(IE) Игнорирование <script> в innerHTML и appendChild.

WP

^_^
(IE) Игнорирование <script> в innerHTML и appendChild.

Javascript'ом с сервера получаю HTML-код и вставляю в div, при использовании innerHTML игнорируется тег <script>
В Firefox решил задачу:
Код:
var el = document.createElement('span');
el.innerHTML = '...';
document.getElementById('mydiv').appendChild(el);
IE никак не хочет.

Подскажите можно ли решить задачу стандартными средствами? Т.е. не парсить регуляркой текст + eval() + innerHTML += :)
Спасибо.
 

fast2111

Новичок
Я методов не знаю, у себя в IE6 проверил - не работает. Ошибка: неожиданный вызов метода или свойства...
В Mozilla работает.

А зачем подгружать <script>? Ведь у тебя и так на странице есть <script>, которой все может. Используй iframe.

Расскажи зачем тебе нужен этот самый <script>.

Сервер сам должен меняет логику клиентской части?
 

WP

^_^
Сервер отдает динамическую страницу в которой должен выполняться код. Пока сделал:
Код:
   var r = req.responseJS.result.match(/<script.*?>(.*?(\r?\n.*?)*)<[/]script>/i);
    for (k in r)
    {
     if (k == 1) {if (typeof (r[k]) == 'string') {eval(r[k]);}}
    }
 

dark-demon

d(^-^)b
грузи через ифрейм - скрипты и xsl трансформации будут выполнены автоматом.
 

SaNeK

Новичок
А нет, внимательно. Повторюсь, что-то вроде этого:
Код:
target_div.innerHTML = "наш любимый код";
var temp_child = target_div.childNodes;
target_div.innerHTML = "";
for(var i = 0; i < temp_child.length; i++) target_div.appendChild(temp_child[i]);
 

SaNeK

Новичок
Тогда как вариант =)
Отдавать отдельно тело JS и отдельно остальную начинку. Вручную пихать в созданный заранее <script></script> , а остальную начинку append'ить после.

-~{}~ 01.11.07 18:20:

WP
интересно = http://msdn2.microsoft.com/en-us/library/ms533897.aspx
 

WP

^_^
SaNeK
Я так делал но не понравилось... люблю кошерные решения.

Код:
<span id="myspan">1</span>
<script type="text/javascript">
load = function()
{
 var result = '<b>1</b><script>\r\nalert(123);\r\n<'+'/script><b>1</b>';
 var el = document.createElement('div');
 var target_div = document.getElementById('myspan');
 el.innerHTML = result;
 var a = new Array();
 for (var k = 0; k < el.childNodes.length; k++) {a[k] = el.childNodes[k];}
 target_div.innerHTML = "";
 for (var k in a)
 {
  if (a[k].tagName == 'SCRIPT') {eval(a[k].innerHTML);}
  else {target_div.appendChild(a[k]);}
 }
}
load();
</script>
-~{}~ 01.11.07 11:40:

MiRacLe
Я так делал... это некрасивое решение. Все равно надо было бы регуляркой обрабатывать текст вывода на сервере и класть в отдельную переменную скрипты, а это некрасиво.

-~{}~ 01.11.07 11:49:

SaNeK
Внимательно почитал ссылку, спасибо.

Код:
<span id="myspan">1</span>
<script type="text/javascript">
load = function()
{
 var result = '<b>1</b><script defer="true">\r\nalert(123);\r\n<'+'/script><b>1</b>';
 var el = document.createElement('div');
 var target_div = document.getElementById('myspan');
 el.innerHTML = result;
 target_div.appendChild(el);
}
load();
</script>
Катит и в IE и в FF, хотелось бы еще и оперу захватить.

-~{}~ 01.11.07 11:57:

Не удалось последним вариантом захватить Оперу, поэтому решил использовать вариант ...for (var k = 0; k < el.childNodes.length; k++) {a[k] = el.childNodes[k];}.... т.к. он работает везде.

-~{}~ 01.11.07 12:14:

Патч для kLayers:
Код:
KLP.swrite=function(str)
{
 this.write('');
 this.sadd(str);
}
KLP.sadd=function(str)
{
 var el = document.createElement('span');
 el.innerHTML = str;
 var a = new Array();
 for (var k = 0; k < el.childNodes.length; k++) {a[k] = el.childNodes[k];}
 for (var k in a)
 {
  if (a[k].tagName == 'SCRIPT') {eval(a[k].innerHTML);}
  else {this.object.appendChild(a[k]);}
 }
}
 

fast2111

Новичок
WP Ты используешь такое понятие как AJAX или свои действия ты обзываешь по другому?
Я к тому что AJAX подрузомевает передачу либо plaintext(JSON который также надо 'evalить') либо XML, третьего не дано(HTML).
Передовай тело своего JS скрипта отдельно <myscript>...</myscript>(XML), ну и конечно делай eval.
Либо еще извраты:

1. подгружай не тело JS а его "определение" и браузер пусть сам загружает тело,
т.е. <script src="myscript.js" ... /> (Возможно ли это незнаю ...)

2. делай невидимый iframe в котором будет твой JS скритп подгружаться, а оброщение к ниму делай через document.frames...

1 ~ 2 путсь браузер это делает а не твой обработчик JS...
 

dimagolov

Новичок
fast2111, про iframe. при перезагрузке в IE имеем щелчек, что для WP не приемлемо, зачем опять про них?
 
Сверху