Redireccionar ventana principal desde una acción de iframe

312

¿Qué JavaScript necesito usar para redirigir una ventana principal desde un iframe?

Quiero que hagan clic en un hipervínculo que, mediante JavaScript o cualquier otro método, redirija la ventana principal a una nueva URL.

Haga clic en Upvote
fuente
55
La ventana principal , en sí misma, también podría ser un IFrame. Como la respuesta aceptada se dirige a la ventana superior , le sugiero que cambie su pregunta un poco.
Ron Klein

Respuestas:

521
window.top.location.href = "http://www.example.com"; 

Como se indicó anteriormente, redirigirá el iframe principal.

MIP
fuente
No creo que la misma política de origen se aplique aquí. Tiene sentido que pueda separar su sitio del iframe de otra persona.
Brian McAuliffe el
1
En Chrome, @Parris jsfiddle arroja este error: JavaScript no seguro intenta iniciar la navegación para el marco con la URL ' jsfiddle.net/ppkzS ' desde el marco con la URL ' parrisstudios.com/tests/iframe_redirect.html '. El marco que intenta la navegación de la ventana de nivel superior está aislado, pero el indicador 'permitir-navegación superior' no está establecido.
Bjarte Aune Olsen
1
@BjarteAuneOlsen interesante, podría ser un cambio reciente en Chrome o webkit. Definitivamente estaba funcionando anteriormente. Han pasado un par de años :). Además, la respuesta solía indicar que se aplicaba la misma política de origen, que anteriormente hacía que la respuesta fuera incorrecta, pero ahora la corrige y mi comentario es incorrecto -_-.
Parris
44
@BjarteAuneOlsen: creo que esto se debe a que los Iframes en JSFiddle están deliberadamente protegidos, por lo que han negado explícitamente ciertas características (como la redirección, etc.): existe el peligro de que use JS para navegar lejos de JS Fiddle y perder su trabajo. ..
Zhaph - Ben Duguid
12
Los errores que las personas están encontrando aquí se deben a un nuevo atributo HTML5 para iframes llamado " sandbox" - developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe El sandboxatributo impide que JavaScript realice ciertas acciones dentro de un iframe basado en una lista blanca dada de acciones permitidas. La allow-top-navigationpropiedad es una de las acciones que puede habilitar en la lista blanca, lo que permite que este código funcione. Si el sandboxatributo es abscent, se permiten todas las acciones. Si está presente y una cadena vacía, se deniegan todas las acciones.
Marcus Harrison
115

Descubrí que eso <a href="..." target="_top">link</a>también funciona

Haga clic en Upvote
fuente
77
Si bien la respuesta seleccionada es correcta, creo que esta es una mejor respuesta para la intención de la pregunta. Además, funcionará para las personas que tienen JS deshabilitado.
Michael - ¿Dónde está Clay Shirky?
Estoy de acuerdo en que esta es la mejor solución, pero el OP solicitó específicamente JavaScript. Por otro lado, OP especificó que debería activarse a través de un ancla: no puedo ver un escenario en el que uno se vea obligado a usar JavaScript desde una etiqueta de ancla para lograr el resultado deseado, por lo tanto, la pregunta es engañosa.
nocarrier
2
Tan simple y elegante. Funciona como encanto :)
Yash
54
window.top.location.href = "http://example.com";

window.top se refiere al objeto de ventana de la página en la parte superior de la jerarquía de marcos.

Luca Matteis
fuente
99
La propiedad window.top.location.href no se puede actualizar desde Iframe, arroja el acceso denegado de ejecución. Solo se puede ejecutar cuando está probando en localhost
Muhammad Ummar
44
@Ummar: Agregaría que esto funciona cuando el padre y el iframe tienen el mismo dominio, el mismo puerto (las mismas políticas de origen), arroja una excepción de acceso denegado cuando son diferentes, para evitar violaciones de seguridad
Quan Mai
55
@Ummar que no es cierto, jsfiddle.net/ppkzS como prueba. Puede cambiar window.top.location.href. Simplemente no puedes leerlo. Funciona en cromo.
Parris
Gran jsfiddle @Parris, eso lo resuelve para mí :)
Max Williams
2
Sospecho que algunos de los escépticos pueden haber intentado algo como esto dentro del iframe: window.top.location.href = window.top.location.href ;
mjj1409
15

o una alternativa es la siguiente (usando el objeto del documento)

parent.document.location.href = "http://example.com";
Rojo real.
fuente
55
Esa solución es específica de Firefox. Uno solo debe usar parent.location.href = .... developer.mozilla.org/en/document.location
kay - SE is evil
15

target="_parent"funcionó muy bien para mí fácil y sin problemas!

rDroid
fuente
Estos parecen funcionar muy bien. ¿Hay alguna desventaja al usar este método en lugar de Javascript?
flyingL123
No que yo sepa. COMPARTE si descubre algo.
rDroid
7

@MIP tiene razón, pero con las versiones más nuevas de Safari, deberá agregar el atributo sandbox (HTML5) para dar acceso de redireccionamiento al iFrame. Hay algunos valores específicos que se pueden agregar con un espacio entre ellos.

Referencia (deberá desplazarse): https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe

Ex:

<iframe sandbox="allow-top-navigation" src="http://google.com/"></iframe>
Raymond B
fuente
Tenga en cuenta que el sandboxatributo habilita un conjunto adicional de restricciones para el contenido en <iframe>. El valor de la sandboxpropiedad elimina restricciones particulares. Así que ten cuidado con el uso de esta función. w3schools.com/tags/att_iframe_sandbox.asp
gitaarik
3

Esto resolverá la miseria.

<script>parent.location='http://google.com';</script>
Ali Haris
fuente
3

Si desea redirigir a otro dominio sin que el usuario tenga que hacer nada, puede usar un enlace con la propiedad:

target="_parent"

como se dijo anteriormente, y luego use:

document.getElementById('link').click();

para que se redirija automáticamente.

Ejemplo:

<!DOCTYPE HTML>

<html>

<head>

</head>

<body>

<a id="link" target="_parent" href="outsideDomain.html"></a>

<script type="text/javascript">
    document.getElementById('link').click();
</script>

</body>

</html>

Nota: El comando click () de JavaScript debe aparecer después de que declare el enlace.

Tom Burris
fuente
1

Es posible redirigir desde un iframe, pero no obtener información del padre.

Joris Kok
fuente
0

Intenta usar

window.parent.window.location.href = 'http://google.com'
Chirag Gohel
fuente
Versión simple: parent.window.location = '<URL>';
shasi kanth
1
o más simplificado:parent.location = 'url'
parrilla
0
window.top.location.href = 'index.html';

Esto redirigirá la ventana principal a la página de índice. Gracias

dnts2012
fuente
Duplicado de esta respuesta de casi 5 años antes.
Michael - ¿Dónde está Clay Shirky?
-2

Tenemos que usar window.top.location.href para redirigir la ventana principal desde una acción de iframe.

URL de demostración :

Faizal
fuente
1
¿Quienes somos nosotros? :) ¿Podría escribir las partes esenciales de la URL en la respuesta por favor? Las URL / enlaces pueden cambiar o eliminarse.
YesThatIsMyName
-8

Redireccionar iframe en la ventana principal por iframe en el mismo padre:

window.parent.document.getElementById("content").src = "content.aspx?id=12";
mohamed moren3
fuente