2012-02-28 17 views
5

Estoy intentando crear una página que, cuando se renueve, cargue aleatoriamente una url de una lista de URL. La mejor manera que he encontrado para hacer esto hasta ahora es hacer que PHP tome la línea al azar del archivo y luego cargarlo en un iframe. Esto también me permite tener un botón de cerrar en una barra superior que permite que cualquier página cargada en el iframe se rompa.Caché de carga de Firefox en iframe dinámico

El problema que estoy teniendo es que en firefox después de que un par vuelve a cargar el iframe simplemente comienza a revertir a un caché y no cargará nada nuevo. Supongo que es un problema de caché porque presionar Ctrl + F5 hará que el iframe cargue una nueva página.

He intentado poner un montón de etiquetas meta anti caché, así como una porción de javascript que encontré en el artículo this.

Hasta ahora nada ha funcionado. ¿Alguien sabe una buena solución o ve algo mal en mi código (soy muy novato).

¡Gracias por cualquier ayuda!

Aquí está el código:

</html> 

<head> 
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> 
<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<meta http-equiv="expires" content="FRI, 13 APR 1999 01:00:00 GMT"> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 

<script type="text/javascript"> 

function Ionload() 
{ 

$(parent.document).find("iframe").each(function() { 
    // apply the logic only to the current iframe only 
    if(this.contentDocument == window.document) { 
     // if the href of the iframe is not same as 
     // the value of src attribute then reload it 
     if(this.src != location.href) { 
     this.src = this.src; 
     } 
    } 
}); 

} 
</script> 

<?php 

class MyClass 
    { 
    function GetLine() 
     { 
      global $line; 

      srand ((double)microtime()*1000000); 
      $f_contents = file ("urlz"); 
      $line = $f_contents[array_rand ($f_contents)]; 

     } 

    function PrintVar() 
     { 
      global $line; 
      print $line; 
     } 
    } 

MyClass::GetLine(); 

?> 

<style type="text/css" media="all"> 
    html, body { 
     height: 100% 
    } 
    body { 
     margin: 0; 
     overflow: hidden; 
    } 
    #topbar { 
     height: 50px; 
     width: 100%; 
     border-bottom: 3px solid #666 
    } 
    #page { 
     height: 100%; 
     width: 100%; 
     border-width: 0 
    } 
</style> 

</head> 
<body> 

<div id="topbar"> 

<a href=<?php MyClass::PrintVar();?> target="_top">close</a> 

</div> 

</body> 

<iframe id="page" name="page" onload="Ionload()" src=<?php MyClass::PrintVar();?> frameborder="0" noresize="noresize"></iframe> 

</html> 

Actualización:

Con la ayuda de GGG me lo arreglen. Aquí está el cambio en la función:

function GetLine() 
    { 
     global $newline; 

     srand ((double)microtime()*1000000); 
     $f_contents = file ("urlz"); 
     $line = $f_contents[array_rand ($f_contents)]; 
     $newline = $line . "?foo=" . rand(); 

    } 

Fui con un número aleatorio en lugar de una secuencia que no sabía cómo llevar una secuencia de una recarga a otro, pero esto funciona.

También noté que el problema persiste si Firefox se actualiza en menos de dos segundos después de cargar la página, pero puedo soportarlo.

Respuesta

3

Intente tachar una cadena de consulta ficticia en la URL para que el navegador se vea obligado a omitir la caché.

Por ejemplo, en lugar de cargar www.google.com, cargue donde N es un número que aumenta con cada carga.

+0

¿Hay alguna manera de que PHP haga esto, ya que está retirando el enlace del archivo? Soy muy nuevo en PHP. Esta es realmente la primera vez que intento usarlo. Gracias. – silverMASH

+0

Sí, puede usar el operador '.' (punto) para la concatenación de cadenas en PHP. –

+0

¡Gracias! Creo que lo tengo funcionando. Solución en la publicación original. – silverMASH

Cuestiones relacionadas