2010-02-09 20 views
14

¿Hay alguna manera de detener un Iframe recargándolo cuando cambio su posición dentro del DOM? Un simple ejemplo:¿Cómo puedo detener una recarga IFrame cuando cambio su posición en el DOM?

<script type="text/javascript"> 
function moveiframe() { 
    var dest = document.getElementById('newparent'); 
    dest.appendChild(document.getElementById('googleframe')); 
} 
</script> 
<iframe src="http://www.google.com" id="googleframe"></iframe> 
<input type="button" onclick="moveiframe()" value="Move" /> 

clic en el botón "Mover" cambia la matriz del marco flotante, y vuelve a cargar su contenido (en Firefox y Chrome, pero no IE).

¡Cualquier sugerencia sería muy apreciada!

[Actualizado con información de fondo]

Estoy cargando anuncios del sitio en divs de marcador de posición en la parte inferior de la página (para evitar la carga anuncio de la celebración de la carga de la página) - y luego el desplazamiento de los divs que' Se ha escrito en su contenedor correcto una vez cargado. Todo funciona muy bien ... a menos que el anuncio que se sirve utiliza un iframe (como google adsense) en cuyo caso el anuncio se carga dos veces y la porción se arruina.

+0

iframe se vuelve a cargar porque lo está colocando nuevamente en el dom (dest.appendChild (IFRAME)) ... considere una biblioteca de JavaScript que le permitirá moverlo. – Andreas

+2

andreas - ¿conoces alguna librería javascript que te permita moverla? estaría interesado en buscar en la fuente y ver cómo lo hacen ... –

Respuesta

10

Teniendo en cuenta la simplicidad de su caso de prueba, parece que los únicos métodos que tiene disponible para poner un elemento dentro de otro siempre va a obligar a los contenidos para recargar.

[Editar ] Después de ver lo que está tratando de hacer, hay un par de cosas que puede probar:

  1. Todos los anuncios podrían ser servidos en IFRAMEs (en su propio sitio), que no lo hará aguanta la carga de la página y puede colocarse en el lugar correcto de inmediato.
  2. Como se mencionó anteriormente, las IFRAME no retrasarán la carga de la página para que pueda colocar los anuncios en su lugar de inmediato si son IFRAMEs y cargarlos en la parte inferior si se trata de otra cosa. Por supuesto, esto no funcionará si la parte lenta es antes de saber si va a obtener un IFRAME o no.
  3. Puede mantener el contenido en su marcador de posición DIV, pero cuando termina de cargarlo, simplemente cambie la posición (con CSS de posicionamiento absoluto) en el lugar correcto de la página. No es la solución más elegante, pero debería funcionar bien.
+0

Básicamente, estoy cargando los anuncios del sitio en divisores de posición en la parte inferior de la página (para evitar que la carga del anuncio aumente la carga de la página) y luego, una vez cargados, los divs en los que se han escrito en su contenedor correcto. funciona todo muy bien ... a menos que el anuncio que se publique utiliza un iframe (como google adsense) en cuyo caso el anuncio se carga dos veces y la porción se descompone –

+0

la alternativa que consideré fue mover el elemento de carga por lo que tarda en la posición y ubicación del elemento objetivo (en lugar de adoptarlo). sin embargo, eso pareció abrir todo un mundo de dolor para asegurarse de que se mantuviera en el lugar correcto. (como si la página se volviera a filtrar, el elemento objetivo se podría mover, pero el que está absolutamente posicionado permanecería en el lugar equivocado). si crees que esta ruta valdría la pena explorar, voy a publicar una pregunta alternativa? muchas gracias por su ayuda –

+0

gracias renesis. desafortunadamente, iframes crea diversión con problemas de dominio cruzado (para las etiquetas de publicación de anuncios que realmente necesitan acceso directo). yippee. para # 3 Me encontré con algunos problemas cuando exploré esto - Acabo de publicar una nueva pregunta en http://stackoverflow.com/questions/2233337/how-to-keep-an-absolutely-positioned-element-directly -over-the-position-of-inline ... ¿apreciaría cualquier pensamiento que pueda tener? –

1

Una sugerencia rápida sería desarmar el valor del atributo src del elemento iframe o establecerlo en "about: blank".

Depende de usted restaurar el valor anterior (o cualquier valor) al atributo src del iframe (usando JavaScript).

Saludos,

+0

Me parece que el OP quiere que mantenga los mismos contenidos y no los actualice. – Nicole

+0

Renesis, sí, es correcto :) andreas - ¡Desarreglar el atributo src y restablecerlo de nuevo todavía volvería a cargar la página! –

+0

muchas gracias por el voto abajo ... – Andreas

0

¿Qué ocurre si se utiliza una solicitud de ajax para cargar el contenido del anuncio y se agrega el contenido al DOM cuando se devuelve la llamada ajax, en lugar de usar un iframe?

+0

lamentablemente, las etiquetas de publicación de anuncios estándar no se prestan bien a esto; todas ellas dependen del uso de document.write y generalmente tienen varias etiquetas

2

Lamento mi respuesta original, ya que parece estar causando otros dolores de cabeza.He aquí algunas otras posibles soluciones que puede que no haya intentado:

  • Coloque los guiones de anuncios dentro de divs con su estilo display establecido en none. Luego, muévalos a su última versión y cámbielos al display: block después de que la página se haya cargado. Quizás esto impediría que los iframe s carguen su contenido de forma inicial.
  • Pruebe lo mismo, solo con visibility configurado en hidden, luego cámbielo a visible.
+0

Nice ... otro enfoque sería cargar ellos como texto puro usando un enfoque de micro-plantillas: '' then '$ ('# placeholder'). html ($ ('# ad1'). html()) 'cargará ese texto en su lugar (y hará que se represente en ese momento). Ver http://ejohn.org/blog/javascript-micro-templating/ del creador del propio jQuery. – Nicole

+0

'es una idea dulce, gracias jacob. lamentablemente no parece detener la carga del navegador en el marco dos veces! –

+0

renesis - desafortunadamente porque el iframe sería escrito por el servidor de anuncios, como parte de un document.write, no estoy seguro de poder hacer que aparezca dentro de una etiqueta de script? interesante sin embargo. echará un vistazo. –

Cuestiones relacionadas