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, время: 23:10. |