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.


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.


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


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.


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

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


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>

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>

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.


1

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


0

Intenta usar

window.parent.window.location.href = 'http://google.com'

Versión simple: parent.window.location = '<URL>';
shasi kanth

1
o más simplificado:parent.location = 'url'
parrilla


-2

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

URL de demostración :


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";
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.