He probado una cosa y funciona, pero me gustaría que me dierais vuestra opinión:
A la hora de cargar la pagina ASP en el XMLHttpObject, busco en todo el contenido de esa página, los bloques <script language='javascript'>...</script>. Y cada vez que encuentra uno, a través del DOM, lo meto en la etiqueta <head> de la página principal (la que tiene la capa contenedora). No es muy ortodoxo pero me funciona a la perfección.
Os explico un poco el contexto. En sí es un menú de una aplicación y quiero que el acceso a cualquier parte sea con AJAX; con lo que la página principal tiene el menú y la capa contenedora, donde cargaría todas las páginas ASP de cada opción del menú.
Volviendo al tema, las dos únicas pegas que le encuentro son:
- Que en la etiqueta <head> de la página principal no puedo meter ningun script de javascript (así que los meto en el body).
- La otra pega es que cada vez que pinche en una opción y actúe el AJAX, tengo que limpiar todas los scripts de la etiqueta <head> antes de cargar la nueva página.
Os dejo el código del Javascript por si le queréis echar un vistazo, me gustaría conocer opiniones :P.
Código:
function cargarContenido(url, parametros)
{
var cadena;
var aperturascript = "<script language='javascript'>";
var cierrescript = "</script>";
var x;
var cabecerapagina = document.getElementsByTagName('head')[0];
//Limpiamos los scripts de la cabecera
x = 0;
while (cabecerapagina.childNodes[x])
{
if (cabecerapagina.childNodes[x].tagName.toUpperCase() == 'SCRIPT')
{
cabecerapagina.removeChild(cabecerapagina.childNodes[x]);
}
else
{
x++;
}
}
////
ajax = nuevoAjax();
url = url + parametros;
ajax.open("GET", url,true);
ajax.onreadystatechange = function()
{
if (ajax.readyState==4)
{
cadena = ajax.responseText;
contenidopagina = cadena; //Metemos en una variable el contenido entero de la página puesto que jugaremos con la variable "cadena" despues
while (cadena.indexOf(aperturascript) != -1 && cadena.indexOf(cierrescript) != -1)
{
var script_pagina = document.createElement('script');
script_pagina.setAttribute('type', 'text/javascript');
script_pagina.text = cadena.substring(cadena.indexOf(aperturascript) + aperturascript.length, cadena.indexOf(cierrescript))
cabecerapagina.appendChild(script_pagina);
cadena = cadena.substring(cadena.indexOf(cierrescript) + cierrescript.length);
}
contenedor.innerHTML = contenidopagina;
}
}
ajax.send(null)
}
Un saludo