evalScripts без regexp и eval
Есть ли какой нибудь природный способ выполнить js скрипты при обновлении содержимого DOM элемента.
Если я не ошибаюсь во всех фрэймворках для этих целей используют Regexp + eval Вот такой пример:
<div id="div">
DIV
</div>
<script>
function test1() {
var divNode = document.getElementById('div');
var newNode = divNode.cloneNode(false);
newNode.innerHTML = 'TEST1<script>alert("ok")<\/script>'
divNode.parentNode.replaceChild(newNode, divNode);
}
function test2() {
var divNode = document.getElementById('div');
divNode.innerHTML = 'TEST2';
var scriptNode = document.createElement('script');
scriptNode.innerHTML = 'alert("ok")';
divNode.appendChild(scriptNode);
}
function test3() {
var divNode = document.getElementById('div');
divNode.innerHTML = 'TEST3<script>alert("ok")<\/script>';
}
</script>
<a href="" onclick="test1(); return false">Test1</a>
<a href="" onclick="test2(); return false">Test2</a>
<a href="" onclick="test3(); return false">Test3</a>
test1 и test2 работают в FF test2 работает в Opera В IE ничего не работает, test2 - выдаёт ошибку У кого какие мысли на счёт того, чтоб реализовать что то подобное с test1 или test3, чтобы к примеру делать update элемента ajax-ом c выполнением скриптов содержащихся в входном html ? |
вот тебе затравка для брожения
function getJSONData(){
eval('var r='+arguments[0]+';');
return r||null;
}
function test4(){
var objStr="{c:'new data into div',f:function(){alert('updated!');}}";
var j=getJSONData(objStr||null)||null;
if(j){
if(j.c)
document.getElementById('div').innerHTML=j.c;
if(j.f)
j.f();
}
}
работает в FF3.5 && IE8, в остальных не проверял ЗЫЖ в любом случае, я бы не советовал тебе передавать скрипты в тело какого либо элемента, лучше вызывать уже готовые функции. |
| Часовой пояс GMT +3, время: 17:32. |