PDA

Pogčedajte punu verziju : Ajax generisani JS, da li se parsa ?


cvele
27. 11. 2006., 11:46
Dakle ono sto me zanima jeste da li ce browser isparsati JS koji dobije kao rezultat callbecka jedne Ajax aplikacije...
prostije receno ajax fja vraca neki tekst koji se ispisuje na strani a u sebi sadrzi pozive za neke JS klase... da li ce browser isparsati te pozive ?

Pitam posto imam neki veoma cudan problem sa time... i to je jedino resenje (razumno) zasto neradi...

dee
27. 11. 2006., 11:53
daj nesto konkrento ako moze...

generalno, mislim da bi trebalo radit. nisam radio konkretno ajaxom, ali sam imo primjera gdje sam javascriptom upisivo drugi javascript kao innerHTML u druge elemente i radilo je. zato mislim da bi trebalo...

mozes eventualno imat problema sa char escapeom...

cvele
27. 11. 2006., 12:04
rado bih ti dao primer ali bez linka tesko da ce znaciti (posto radi kada se ispise rucno u sam html)... a nemogu link da dam zato sto se radi o nekom intranetu...

Br@nkoR
27. 11. 2006., 18:46
Hmm.. ukoliko koristiš innerHTML, js kôd mislim da se neće izvršiti, potrebno je da ga ti izvršiš, npr. nešto na brzinu:

<script>
String.prototype.evalScript = function() {
return this.replace(/<script[^>]*?>((\n|\r|.)*?)<\/script>/img, function(m, m1) { eval(m1); return m;});
}

function testCodeFunction() {
var response = '<div>novi sadrzaj 1</div><script>alert("bre1");</s'+'cript><div>novi sadrzaj 2</div><script>alert("bre2");</s'+'cript>';
response = response.evalScript();
document.getElementById('testCode').innerHTML = response;
}
</script>

<a href="#" onclick="testCodeFunction(); return false;">test</a>
<div id="testCode">a</div>

ivanhoe
27. 11. 2006., 23:12
Ovaj JS snippet sam negde pokupio, ne znam tacno gde:

Executing Javascript

Since the browser won't execute <script> tags when changing innerHTML, you may want to apply the following function call on document.getElementById(target):

var bSaf = (navigator.userAgent.indexOf('Safari') != -1);
var bOpera = (navigator.userAgent.indexOf('Opera') != -1);
var bMoz = (navigator.appName == 'Netscape');
function execJS(node) {
var st = node.getElementsByTagName('SCRIPT');
var strExec;
for(var i=0;i<st.length; i++) {
if (bSaf) {
strExec = st[i].innerHTML;
}
else if (bOpera) {
strExec = st[i].text;
}
else if (bMoz) {
strExec = st[i].textContent;
}
else {
strExec = st[i].text;
}
try {
eval(strExec.split("<!--").join("").split("-->").join(""));
} catch(e) {
alert(e);
}
}
}JavaScript Notes:
* IE always returns tags in UPPER CASE, so you must search for SCRIPT and not script. Keep your SCRIPT tags in upper case for Firefox compatibility.
* Do not use // comments, use /* */ instead. The eval executes all your javascript as though it was on one line, so you must end each statement with a semicolon (;).
* Any functions declared in your JavaScript will go out of scope once the eval statement completes. It is possible to keep them in scope by attaching them as a method to a function that was defined at the document level.



EDIT: A evo sad nadjoh nesto jos bolje: http://24ways.org/advent/have-your-dom-and-script-it-too

chesare
28. 11. 2006., 01:33
Koliko ja znam (a slab sam sa js-om), mootools (http://mootools.net/) (lightweight javascript framework) u okviru ajax.js komponente ima funkciju evalScript (http://docs.mootools.net/files/Addons/Ajax-js.html#Ajax.evalScripts).

method:evalScripts
Executes scripts in the response text

Ponesto o samom methodu ima vise na forumu
(http://forum.mootools.net/search.php?q=evalScript&x=0&y=0)
Ako nisam promasio temu, tj.

cvele
28. 11. 2006., 08:25
Hmm.. ukoliko koristiš innerHTML, js kôd mislim da se neće izvršiti, potrebno je da ga ti izvršiš, npr. nešto na brzinu:

<script>
String.prototype.evalScript = function() {
return this.replace(/<script[^>]*?>((\n|\r|.)*?)<\/script>/img, function(m, m1) { eval(m1); return m;});
}

function testCodeFunction() {
var response = '<div>novi sadrzaj 1</div><script>alert("bre1");</s'+'cript><div>novi sadrzaj 2</div><script>alert("bre2");</s'+'cript>';
response = response.evalScript();
document.getElementById('testCode').innerHTML = response;
}
</script>

<a href="#" onclick="testCodeFunction(); return false;">test</a>
<div id="testCode">a</div>


tacno to... shvatio sam to pre par sati