Ver Mensaje Individual
  #9 (permalink)  
Antiguo 27/10/2005, 04:50
PosDon
 
Fecha de Ingreso: octubre-2004
Mensajes: 104
Antigüedad: 20 años
Puntos: 0
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