Evitar que una página salga dentro de un frame
Hoy toca un truco sencillo de JavaScript pero útil a la vez. Quizás te haya ocurrido alguna vez ver una página tuya dentro de otra página, ya sea dentro de un frame o iframe. No sé a ti, pero a mi esto me parece bastante molesto, ya que después de todo el esfuerzo que se toma uno en hacer que la página quede cuadrada y se vea bien en todos los navegadores posibles, resulta que alguien la mete en un frame de estos y ya nada funciona como debería.
Evitarlo es realmente sencillo, basta con incorporar el siguiente código JavaScript en tu página.
<script type="text/javascript"> if (top != self) top.location.href = location.href; </script> |
Si nuestra página está dentro de un frame, top será distinto de self, en cuyo caso se cambia la url de la página que nos contiene por la nuestra, de forma que el frame desaparece y nuestra página pasa a tomar el control de la ventana. Rápido, sencillo y eficaz.
hola lo que preguntare es de unas dimenciones grandes ya que se trata de los spamers y las ladronas de contenido de paginas lo que afecta a una gran mayoria de webmaster sobretodo en goggle.hay unos script que poniendo el url de una pagina (la que ellos quieran) sobre todo de paginas bien posicionadas estos script crean multiples paginas con tus claves y contenido para posicionarse atraves de tu trabajo.afectando tu trabajo ya que de paso goggle banea estas paginas (las tuyas) por creer que estas en esa onda.hay alguna forma de evitar de caer en esos scrit o robots de ladrones…..
¿Y cómo sería la situación inversa para regenerar el Frameset, alguien la abre fuera del mismo?
Eso que hace MSDN cuando uno accede desde -por ejemplo- Google a una página buscada, y regenera el Frameset.
Maravillosos Contenidos, vayan mis cordiales saludos.
A mi tambien me interesa lo contrario. Vamos, que una página se abra siempre en el iframe de otra y núnca por separado. ¿es posible?
Muchas gracias y enhorabuena por la web
Respecto a como hacer que la página se abra dentro de un frame si se accede directamente a ella, al estilo de lo que hacer msdn, el mecanismo sería similar, por ejemplo:
<script>
if(top == self){
location.href = ‘http://www.example.com/frame.php?p=pagina’;
}
</script>
En el anterior código considero que http://www.example.com es el dominio de nuestra web, y que frame.php es la página que monta los frames, y que necesita que le pasemos por parámetro (p) el nombre de la página a mostrar en el frame principal.
En primer lugar muchas gracias Patxi por tu rápida respuesta. Se nota que pilotas nucho pero yo soy un gran profano en la materia…
Lo he intentado pero nada. Primero desconozco el parametro p y la página que contiene el iframe es XHTML y no php por lo que no se si es aplicable…
Sustituí «http://www.example.com/frame.php» por la ruta a la pagina index.html (que alberga el iframe) y «pagina» por «contenido1.html» que es la página que quiero o incluso su título «contenido1″ o hasta el name del iframe de la página contenedora (ventana), pero nada.
Supongo que estoy haciendo las cosas mal… ¿no?
De momento utilizo este scrip que si me funciona:
if(top==self) top.location=»index.html»
que redirige a index.html pero claro, cargando el iframe src por defecto (contenido0.html) y no el que desearia (contenido1.html) que es a la página que se ha accedido.
En fin, gracias por leerme y te agradezco cualquier comentario.
Saludos
Hola Goser. Para que el index.html pueda cargar el contenido correcto en el iframe, hay que pasarle de alguna forma el nombre de la página a cargar. Para esto normalmente deberías utilizar algo de programación en el servidor, PHP, ASP.NET o lo que sea, aunque también podrías hacerlo únicamente con JavaScript, aunque sea un poco más laborioso.
La forma de indicarle al index.html qué página cargar, lo tienes que hacer en cualquier caso, enviándole un parámetro. Este parámetro puede ser la ruta de la página a mostrar en el iframe, aunque de esta forma un usuario malicioso podría hacer aparecer otra página dentro de la tuya. Lo ideal por tanto, es indicar un nombre interno, y que el index.html (en realidad un index.php por ejemplo), en base a ese nombre, genere la url concreta.
Por ejemplo, si tenemos unas páginas productos.html, categorias.html y condiciones.html, que queremos que se muestren dentro del iframe, podríamos usar en cada una de ellas algo como:
if(top==self) top.location=»index.php?p=productos»
Podríamos sustituir el «productos» por «categorias» y «condiciones» en cada una de las páginas.
Luego, en el index.php, podríamos hacer:
if($_GET[‘p’]==’productos’) $url = ‘productos.html’;
else if($_GET[‘p’]==’categorias’) $url = ‘categorias.html’;
else if($_GET[‘p’]==’condiciones’) $url = ‘condiciones.html’;
Con esto tendríamos la url de la página a mostrar en la variable $url. Quedaría únicamente escribir el código del iframe proporcionando la url.
<iframe src=»<?=$url?>»></iframe>
Ten en cuenta lo único que el ejemplo está hecho con PHP, si quieres utilizar ASP.NET, o JavaScript tendrías que modificarlo, pero la idea es la misma.
Muchas gracias Patxi, voy a jugar con las líneas que me das haber si consigo hacerlo funcionar…
Saludos
Hola Paxti. Estoy a punto de conseguirlo pero aún fallan cosas… Supongo que el ejemplo que me pones no precisa php y solo necesita script.
Tengo algunas dudas:
Siguiendo tu ejemplo cuando habro directamente productos.html redireciona a index.html?p=productos, aqui todo OK. El problema esta en index.html
Primera duda: el codigo del script
if($_GET[’p’]==’productos’) $url = ‘productos.html’;
else if($_GET[’p’]==’categorias’) $url = ‘categorias.html’;
else if($_GET[’p’]==’condiciones’) $url = ‘condiciones.html’;
es correcto o hay que cambiar [’p’] por [’p’]?
Segunda duda: ”> ó ”
Tercera duda: ¿donde coloco ”>?
Si lo sustituyo por el que ya tengo muestra en el iframe un mensaje de error de que no se encuentra la página %3C?=$url?>
¿? ¿No hay que decirle el url por defecto?
En fin muchas dudas y algo que se me está escapando
Siento ser tan pesado Patxi, pero soy muy limitado. Muchas gracias
Perdoname pero los codigos no se reflejan como los pegé en el post
la primera duda era hacerca de el tipo de comilla tras la p que en tu código es diferente
el segumdo acerca del iframe src. si tiene un > de mas
el tercero acerca de donde colocar este iframe src
hola quisiera ver si me pudieras ayudar el problema que tengo por que acabo de hacer una pagina con frames toda va bien pero cuando quiero que los frames (tengo formularios en cada frame) se restauren osea que vuelvan a su estado inicial no puedo por que dentro de esos frame stambien tengo frame anidades y no se como hacrele para poder acceder a esos frames anidados no se me pudieras ayudar
gracias habia buscado esto por varios dias la verdad parece poco pero no tenia ni idea de como hacerlo y esto me hacido de mucha ayuda, gracias de nuevo y sigue subiendo codigos como este, la verdad los pequeños codigos son los que mas cuestan para mi
Mil gracias no sabes realmente como me has ayudado, en mi trabajo nos estabmos partiendo la cabeza y buscando alredodor de 5 horas encontrre la luz mil gracias.. PAZ
Hey man! me sirvió mucho… me salvaste de una grande!
hey esta todo muy bien por aqui, pero digan dónde poner los codigos, ¿no? por ejem…entre o y
GRAAACIAAASSS!!!! Siete años despues y aun es la ostia!!!