Newsgroup: it.comp.lang.javascript
Titolo: Ajax ed esecuzione javascript

Sto personalizzando una libreria ajax (ahah). C'è una parte del codice 
che non capisco ed è quella che suppongo consenta di eseguire il codice 
javascript inserito nella pagina con innerhtml.
Qualche anima pia mi sa spiegare secondo quale logica funziona?
Le righe "incriminate sono le seguenti:
	var j = document.createElement("div");
	j.innerHTML = "_" + output + "_";
	ahah_execJS(j);
Copincollo le funzioni interessate:
//----------------------------------------
function ahahDone(target) {
	// only if req is "loaded"
	if (req.readyState == 4) {
		// only if "OK"
		if (req.status == 200) {
			results = req.responseText;
			document.getElementById(target).innerHTML = results;
			var j = document.createElement("div");
			j.innerHTML = "_" + output + "_";
			ahah_execJS(j);
		} else {
			document.getElementById(target).innerHTML = "ahah error:n" + 
req.statusText;
		}
	}
}
//----------------------------------------
function ahah_execJS(node) {
	var st = node.getElementsByTagName('SCRIPT');
	var strExec;
	var bSaf = (navigator.userAgent.indexOf('Safari') != -1);
	var bOpera = (navigator.userAgent.indexOf('Opera') != -1);
	var bMoz = (navigator.appName == 'Netscape');
	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); }
		catch(e) { alert(e); }
	}
}
//========================================

P.S.: Se uso firebug per guardare il codice prodotto, vedo l'html 
inserito ma non c'é traccia di quel fantomatico div con l'underscore.

 //========================================
per una libreria javascript scaricati tinymce li trovi dentro un file
XHR.js gli accorci il nome alla funzione
..... e ti usi quello. e' LGPL

Ho capito e risolto (stanotte alle 4).
Ho anche fatto una modifica: dichiarando req come variabile locale, 
posso eseguire più istanze contemporaneamente e non fanno casino.
Di seguito la versione definitiva (almeno per me).
//========================================
function ahah(target, script, method, parameters, wait_message) {
	if (method == undefined || method == "get" || method == "")
		method = "GET";
	if (method == "post")
		method = "POST";
	if (parameters == undefined)
		parameters = "";
	if (wait_message == undefined || wait_message == "")
		wait_message = '<img src="/_lib_/ahah/ahah.gif" border=0>';
	// Messaggio di attesa
	document.getElementById(target).innerHTML = wait_message;
	if (window.XMLHttpRequest) {
		var req = new XMLHttpRequest();
		req.onreadystatechange = function() {
			ahahDone(req, target);
		};
		if (method == "GET") {
			req.open("GET", script + "?" + parameters, true);
			req.send("");
		}
		if (method == "POST") {
			req.open("POST", script, true);
			req.setRequestHeader("Content-type",
					"application/x-www-form-scriptencoded");
			req.send(parameters);
		}
		// IE/Windows ActiveX version
	} else if (window.ActiveXObject) {
		var req = new ActiveXObject("Microsoft.XMLHTTP");
		if (req) {
			req.onreadystatechange = function() {
				ahahDone(req, script);
			};
			if (method == "GET") {
				req.open("GET", script + "?" + parameters, true);
				req.send("");
			}
			if (method == "POST") {
				req.open("POST", script, true);
				req.setRequestHeader("Content-type",
						"application/x-www-form-scriptencoded");
				req.send(parameters);
			}
		}
	}
}
// ----------------------------------------
function ahahDone(req, target) {
	// only if req is "loaded"
	if (req.readyState == 4) {
		// only if "OK"
		if (req.status == 200) {
			results = req.responseText;
			document.getElementById(target).innerHTML = results;
			var j = document.createElement("div");
			j.innerHTML = "_" + results + "_";
			ahah_execJS(j);
		} else {
			document.getElementById(target).innerHTML = "ahah error:n"
					+ req.statusText;
		}
	}
}
// ----------------------------------------
function ahah_execJS(node) {
	var st = node.getElementsByTagName('SCRIPT');
	var strExec;
	var bSaf = (navigator.userAgent.indexOf('Safari') != -1);
	var bOpera = (navigator.userAgent.indexOf('Opera') != -1);
	var bMoz = (navigator.appName == 'Netscape');
	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);
		} catch (e) {
			alert(e);
		}
	}
}
// ----------------------------------------
function ahah_submit(form_name, target, script, method, wait_message) {
	var radio_buttons = new Array();
	var nome_buttons = new Array();
	var check_buttons = new Array();
	var nome_buttons = new Array();
	var parameters = "";
	var the_form = document.getElementById(form_name);
	var num = the_form.elements.length;
	if (method == undefined || method == "get" || method == "")
		method = "GET";
	if (method == "post")
		method = "POST";
	if (parameters == undefined)
		parameters = "";
	if (wait_message == undefined || wait_message == "")
		wait_message = '<img src="/_lib_/ahah/ahah.gif" border=0>';
	// submit radio values
	var j = 0;
	for ( var i = 0; i < the_form.length; i++) {
		var temp = the_form.elements[i].type;
		if ((temp == "radio") && (the_form.elements[i].checked)) {
			nome_buttons[j] = the_form.elements[i].name;
			radio_buttons[j] = the_form.elements[i].value;
			j++;
		}
	}
	for ( var k = 0; k < radio_buttons.length; k++) {
		parameters += nome_buttons[k] + "=" + radio_buttons[k] + "&";
	}
	// submit checkbox values
	var j = 0;
	for ( var i = 0; i < the_form.length; i++) {
		var temp = the_form.elements[i].type;
		if ((temp == "checkbox") && (the_form.elements[i].checked)) {
			nome_buttons[j] = the_form.elements[i].name;
			check_buttons[j] = the_form.elements[i].value;
			j++;
		}
	}
	for ( var k = 0; k < check_buttons.length; k++) {
		parameters += nome_buttons[k] + "=" + check_buttons[k] + "&";
	}
	// submit all kind of input
	for ( var i = 0; i < num; i++) {
		var chiave = the_form.elements[i].name;
		var valore = the_form.elements[i].value;
		var tipo = the_form.elements[i].type;
		if ((tipo == "submit") || (tipo == "radio") || (tipo == "checkbox")) {
		} else {
			parameters += chiave + "=" + valore + "&";
		}
	}
	if (method == "GET") {
		ahah(target, script + "?" + parameters, method, '', attesa);
	} else {
		ahah(target, script, method, parameters, attesa);
	}
}
// ========================================