2012-08-27 24 views
5

Tengo una página web en la que estoy tratando de actualizar un iFrame. Intento hacerlo con algo así como un botón <input /> y javascript. Parece que no puedo cargar el iFrame sin borrar el caché. Obtener PHP para borrar la caché sería aún mejor.¿Cómo borro la caché de un iFrame?

EDITAR-ACTUALIZACIÓN

Aquí está la línea aplicación de trabajo.

<input type="button" onClick="javascript: var iFrame = document.getElementById('compilePreview'); iFrame.src = '<? echo ($myFile); ?>?random=' + (new Date()).getTime() + Math.floor(Math.random() * 1000000);" value="Reload Preview" /> 
    <iframe id="compilePreview" src="<? echo ($myFile); ?>" width="940"></iframe> 

Y de grueso, la carga pronto iba a seguir, eliminando la necesidad del botón.

<script> 
    window.onload=refreshIframe; 
    function refreshIframe(){ 
    var iFrame = document.getElementById('compilePreview'); 
    iFrame.src = '<? echo ($myFile); ?>?random=' + (new Date()).getTime() + Math.floor(Math.random() * 1000000); 
    } 
    </script> 
+0

¿Puedes mostrar el método exacto de cómo estás tratando de volver a cargar el iframe? –

+0

¿puedes agregar un bloqueador de caché al final de la URL del iframe? algo así como url + "? ts =" + new Date(). getTime() – olore

+0

Sí, tenía un cerebro pedo en la implementación. Correr ahora, gracias a jfriend00 por obtener los engranajes de molienda. –

Respuesta

15

La primera opción es, probablemente, para controlar el almacenamiento en caché del navegador para la página de iframe de su servidor de web con encabezados HTTP o con etiquetas <meta> (consulte reference).

<meta HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> 
<meta HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> 

Si no puede cambiar esos, entonces se puede establecer una .src en el marco flotante que tiene un parámetro de consulta diferente cada vez para ir alrededor de almacenamiento en caché.

Por ejemplo:

iframeObj.src = "http://www.example.com/page/myframe.html?random=" + (new Date()).getTime() + Math.floor(Math.random() * 1000000); 
+0

Establecer a .src = al archivo + trabajo aleatorio. Gracias. –

+1

Tengo pocas dudas al respecto. Si lo hacemos así, la página no se almacenará en caché en ningún momento, por lo que dará lugar a un mayor tiempo de carga, ¿hay algún método para borrar la caché solo cuando la página expire? –

+0

@Thirumalaimurugan: puede establecer un tiempo de caducidad específico en el HTML o en los encabezados HTTP del servidor. La estrategia de caché de páginas es un tema involucrado que no se explicará en un comentario aquí. – jfriend00

2

Esto es algo que debe hacer en el lado del servidor, controlado a través de las cabeceras HTTP de este modo:

<?php 
header("Cache-Control: no-cache, must-revalidate"); 
header("Expires: Sun, 29 Jul 2012 00:00:00 GMT"); // some day in the past 
+1

Lo intenté, pero el iFrame está en una página secundaria. También se intentó después de compilar el archivo html. Todavía tengo que presionar mi botón "Actualizar vista previa", gracias a jfriend00. Apreciado de todos modos. –

1

Se podría hacer algo como

<iframe src="<?php echo $url.'#nocache'.time(); ?>"> 
#document</iframe> 

lo que permitiría parámetros GET en la URL también sin tener que preocuparse de si se debe utilizar ? o & para su selección aleatoria.

+0

la parte después de '#' no se envía al servidor, así que no creo que influya en el almacenamiento en caché – pkyeck

Cuestiones relacionadas