cargar HTML en una capa

leo
13 de Enero del 2005
Alguien me puede decir como cargar desde una funcion javascript un html externo dentro de una capa.

Gracias

Maria
13 de Enero del 2005
Este es el procedimiento que uso yo, mifecha es una variable que contiene todo el codigo html que necesites, al ser una variable todo tienes que escribirlo en una misma línea, cuidado con las comas simples pq te darán error, sustituyelas por '+"'"+' y todo solucionado. Funciona.
function pintaFecha2(mifecha)
{ if(document.all)
document.all('nombre_capa').innerHTML=mifecha;
else if(document.getElementById)
document.getElementById('nombre_capa').innerHTML=mifecha;
else if(document.layers)
{
with(document.layers['nombre_capa'])
{
document.open();
document.write(mifecha);
document.close();
}
}
}

ana
13 de Enero del 2005
prueba con esto:
document.getElementById("id_de_la_capa").innerHTML="código HTML a incluir dentro de la capa. Tablas, imágenes, etc...";

eth0
13 de Enero del 2005
No puedes hacerlo directamente, sino que necesitas otro elemento, un IFRAME oculto de 1x1 píxeles, donde cargar las páginas antes de pasarlas a la capa.

Lo que tendrías que hacer es esto:

Cargas la página en el IFRAME, usando su propiedad src:

document.getElementById('mi_iframe').src = 'pagina.html';

Esperas a que el IFRAME haya terminado de cargar. Para ello, lo mejor y más compatible es que asignes al evento onLoad del cuerpo (BODY) de la página que está en el IFRAME una función JavaScript que envíe el HTML del IFRAME a la capa:

document.getElementById('mi_iframe').onLoad = cargarCapa();

Y la función cargarCapa simplemente asigna el innerHTML del _cuerpo_ del IFRAME al innerHTML de la capa:

function cargarCapa()
{
document.getElementById('mi_capa').innerHTML = document.getElementById('mi_iframe').document.body.innerHTML;
}

Mientras se carga la capa, puedes escribir en ella un mensaje de espera.

Tengo una página que hice para probar lo que preguntas, en la que utilizo exactamente eso mismo, salvo que en lugar de modificar el onLoad de las páginas por código lo puse directamente en el HTML. Si entras a http://www.killerblade.es.tt lo podrás ver y echarle un vistazo al código.

Eso sí, creo que con Internet Explorer no funciona bien, más que nada por dejadez (lo hice usando DOM, el estándar, pero parece que eso a IE no le gusta), pero con Mozilla Firefox funciona perfectamente. Si todavía usas Internet Explorer será mejor que te plantees el cambio ya.

eth0
13 de Enero del 2005
Ups, he cometido un pequeño error:

En la línea que cambia el onLoad del IFRAME, los paréntesis sobran. Así que la línea queda como sigue:

document.getElementById('mi_iframe').onLoad = cargarCapa;

Si no se ponen los paréntesis, se asigna la función. Si se ponen, se asigna _el resultado_ de la función.