2011-07-11 11 views
6

Un sitio vinculado al mío mantiene mi sitio en un marco, por lo que añade la siguiente JavaScript para mi página:¿Cómo rompes los marcos sin romper el botón de retroceso del navegador?

if (window.top.location != window.location) { 
    window.top.location = window.location 
} 

Ahora bien, si llego a mi sitio a través del sitio infractor, mi sitio rompe con éxito de el marco. ¡Pero el botón de atrás se rompe! El botón "Atrás" envía al usuario a la versión enmarcada de mi sitio, que de inmediato estalla de nuevo y lo devuelve a donde estaba tratando de irse. ¿Hay una manera simple de arreglar esto?

Respuesta

10
window.top.location.replace(window.location); 

El método de reemplazo es específicamente para este propósito. Reemplaza el elemento actual en el estado del historial con el nuevo destino para que el botón Atrás no atraviese el destino que no desea.

1

Otra solución es abrir su sitio en una nueva ventana dejando un mensaje amistoso en el sitio iframes:

if (parent.frames.length) 
{ window.open("mySite.htm", "MySite"); 
    location.href= "framedMessage.htm"; 
} 

Dónde framedMessage.htm contiene algún mensaje amistoso/advertencia.

2

La respuesta de jfriend00 es correcta. El uso del método window.location.replace funcionará sin afectar el botón Atrás.

Sin embargo, me gustaría señalar que siempre que quiera evitar que una página se encuadre, ¡debe hacer más que eso! Hay un par de métodos para evitar que un script simple como ese salga del marco, que funciona en muchos navegadores modernos. Tal vez pueda deshabilitar la página, mostrar un mensaje con un enlace a la página completa, algo así. También podría usar el encabezado de respuesta X-Frame-Options que indica al navegador que no muestre la página en un marco. Si no toma algunas de estas medidas, su sitio podría ser cliqueado.

Cuestiones relacionadas