He conseguido que se ejecuten los scripts llamados vía AJAX de otra manera, sin necesidad de ninguna librería. Es muy fácil, aunque lo he escrito así al vuelo. Habría que arreglarlo un poco:
ejemplo.html:
Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Ejecutar Javascript desde una petición AJAX</title>
<script type="text/javascript">
function nuevoObjetoAjax()
{
var xmlhttp= false;
try
{
xmlhttp= new ActiveXObject("Msxml2.XMLHTTP");
}
catch (excepcion)
{
try
{
xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
}
catch (excepcion)
{
xmlhttp= false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined')
{
xmlhttp= new XMLHttpRequest();
}
return xmlhttp;
}
function cargarDatos(metodo, origen, parametros, destino, cargando)
{
var ajax= nuevoObjetoAjax();
if(!ajax)
{
alert("No se puede ejecutar este proceso: Error de navegador");
return false;
}
metodo= metodo.toUpperCase();
if (metodo=='GET')
{
ajax.open(metodo, origen+'?'+parametros, true);
parametros= '';
}
else
{
ajax.open(metodo, origen, true);
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
}
ajax.onreadystatechange= function() {
if (ajax.readyState==1)
{
if (cargando){document.getElementById(destino).innerHTML = cargando;}
}
if (ajax.readyState==4)
{
document.getElementById(destino).innerHTML = ajax.responseText;
scripts= ajax.responseText;
while (scripts.indexOf("<script>")!=-1)
{
restohtml= scripts.substring(scripts.indexOf("/script")+7, scripts.length);
scripts= scripts.substring(scripts.indexOf("<script>")+8, scripts.indexOf("/script")-1);
eval(scripts);
scripts= restohtml;
}
}
}
ajax.send(parametros);
}
</script>
</head>
<body>
<div id="div" style="border: 1px solid black;">
Haz click <span style="color:blue" onclick="cargarDatos('get', 'ejemplo2.html', '', 'div')">aquí</span> y recibiras un form y un codigo javascript ejecutable via Ajax
</div>
</body>
</html>
ejemplo2.html:
Código HTML:
<form name="form">
<input name="texto" type="text" title="Hola Mundo!" value="Hola Mundo!"/>
</form>
<script>
document.form.texto.onfocus= function(){if (this.value==this.title) this.value= '';}
</script>
<p>Si haces click en el input se borrara el texto por defecto.</p>
<script>
document.form.texto.onblur= function(){if (this.value=='') this.value= this.title;}
</script>
<p>Y si quitas el foco del input se restablecera el texto por defecto.</p>
Los scripts de ejemplo2.html se ejecutan gracias a esta porción de codigo:
Código PHP:
scripts= ajax.responseText;
while (scripts.indexOf("<script>")!=-1)
{
restohtml= scripts.substring(scripts.indexOf("/script")+7, scripts.length);
scripts= scripts.substring(scripts.indexOf("<script>")+8, scripts.indexOf("/script")-1);
eval(scripts);
scripts= restohtml;
}
Ya sé que es un poco bruto, pero funciona