Reindirizza la finestra padre da un'azione iframe


312

Quale JavaScript devo utilizzare per reindirizzare una finestra principale da un iframe?

Voglio che facciano clic su un collegamento ipertestuale che, utilizzando JavaScript o qualsiasi altro metodo, reindirizzerebbe la finestra principale su un nuovo URL.


5
Anche la finestra principale , di per sé, potrebbe essere una IFrame. Poiché la risposta accettata si rivolge alla finestra superiore , ti suggerisco di cambiare un po 'la tua domanda.
Ron Klein,

Risposte:


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

Come affermato in precedenza, reindirizzerà iframe principale.


Non penso che la stessa politica di origine si applichi qui. Ha senso che dovresti essere in grado di rompere il tuo sito dall'iframe di qualcun altro.
Brian McAuliffe,

1
In Chrome, @Parris jsfiddle genera questo errore: tentativo JavaScript non sicuro di avviare la navigazione per frame con URL " jsfiddle.net/ppkzS " da frame con URL " parrisstudios.com/tests/iframe_redirect.html ". Il frame che tenta di navigare nella finestra di livello superiore è in modalità sandbox, ma il flag "allow-top-navigation" non è impostato.
Bjarte Aune Olsen,

1
@BjarteAuneOlsen interessante, potrebbe essere un recente cambiamento in Chrome o webkit. In precedenza funzionava sicuramente. Sono passati un paio d'anni :). Anche la risposta ha usato per affermare che si applicava la stessa politica di origine, che in precedenza rendeva la risposta errata, ma ora la rende corretta e il mio commento sbagliato -_-.
Parris,

4
@BjarteAuneOlsen - Credo che ciò sia dovuto al fatto che gli Iframe su JSFiddle sono deliberatamente sottoposti a sandbox, quindi hanno negato esplicitamente alcune funzionalità (come il reindirizzamento, ecc.) - c'è il pericolo che tu usi JS per allontanarti da JS Fiddle e perdere il tuo lavoro. ..
Zhaph - Ben Duguid,

12
Gli errori riscontrati dalle persone qui sono dovuti a un nuovo attributo HTML5 per iframe chiamato " sandbox" - developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe L' sandboxattributo impedisce a javascript di eseguire determinate azioni all'interno di un iframe su una determinata lista bianca di azioni consentite. La allow-top-navigationproprietà è una delle azioni che è possibile abilitare nella whitelist, che consente a questo codice di funzionare. Se l' sandboxattributo è assente, sono consentite tutte le azioni. Se è presente e una stringa vuota, tutte le azioni vengono negate.
Marcus Harrison,

115

Ho scoperto che <a href="..." target="_top">link</a>funziona anche


7
Mentre la risposta selezionata è corretta, penso che questa sia una risposta migliore per l'intento della domanda. Inoltre, funzionerà per le persone con JS disabilitato.
Michael - Dov'è Clay Shirky il

Sono d'accordo che questa è la soluzione migliore ma l'OP ha specificamente richiesto javascript. D'altra parte, OP ha specificato che dovrebbe essere attivato tramite un'ancora: non riesco a vedere uno scenario in cui si sarebbe costretti a utilizzare javascript da un tag di ancoraggio per ottenere il risultato desiderato, quindi la domanda è fuorviante.
nocarrier,

2
Così semplice ed elegante. Funziona come un incanto :)
Yash,

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

window.top si riferisce all'oggetto finestra della pagina nella parte superiore della gerarchia dei frame.


9
La proprietà window.top.location.href non può essere aggiornata da Iframe, genera accesso negato. Può essere eseguito solo quando si esegue il test su localhost
Muhammad Ummar il

4
@Ummar: aggiungerei che funziona quando il genitore e l'iframe hanno lo stesso dominio, stessa porta (stesse politiche di origine), genera un'eccezione di accesso negato quando sono diversi, per prevenire violazioni della sicurezza
Quan Mai

5
@Ummar che non è vero, jsfiddle.net/ppkzS come prova. È possibile modificare window.top.location.href. Non riesci proprio a leggerlo. Funziona in cromo.
Parris,

Ottimo jsfiddle @Parris, che lo risolve per me :)
Max Williams

2
Sospetto che alcuni dei dubbiosi potrebbero aver provato qualcosa di simile all'interno dell'iframe: window.top.location.href = window.top.location.href ;
mjj1409,


15

target="_parent"ha funzionato alla grande per me. facile e senza problemi!


Questi sembrano funzionare alla grande. Ci sono degli svantaggi nell'usare questo metodo piuttosto che Javascript?
volo L123,

non che io sappia. Condividi se scopri qualcosa.
rDroid,

7

@MIP ha ragione, ma con le versioni più recenti di Safari, dovrai aggiungere l'attributo sandbox (HTML5) per consentire l'accesso di reindirizzamento a iFrame. Ci sono alcuni valori specifici che possono essere aggiunti con uno spazio tra loro.

Riferimento (dovrai scorrere): https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe

Ex:

<iframe sandbox="allow-top-navigation" src="http://google.com/"></iframe>

Si noti che l' sandboxattributo abilita un ulteriore set di restrizioni per il contenuto in <iframe>. Il valore della sandboxproprietà rimuove particolari restrizioni. Quindi attenzione con l'utilizzo di questa funzione. w3schools.com/tags/att_iframe_sandbox.asp
gitaarik

3

Questo risolverà la miseria.

<script>parent.location='http://google.com';</script>

3

Se desideri reindirizzare a un altro dominio senza che l'utente debba fare nulla, puoi utilizzare un collegamento con la proprietà:

target="_parent"

come detto in precedenza, quindi utilizzare:

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

per farlo reindirizzare automaticamente.

Esempio:

<!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: il comando javascript click () deve venire dopo aver dichiarato il collegamento.


1

È possibile reindirizzare da un iframe, ma non ottenere informazioni dal genitore.


0

Prova a usare

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

Versione semplice: parent.window.location = '<URL>';
Shasi kanth,

1
o ulteriormente semplificato:parent.location = 'url'
grilly,


-2

Dobbiamo usare window.top.location.href per reindirizzare la finestra padre da un'azione iframe.

URL demo :


1
Chi siamo :) Potresti scrivere le parti essenziali dall'URL nella risposta per favore? URL / collegamenti possono cambiare o essere eliminati.
YesThatIsMyName

-8

Reindirizzare iframe nella finestra padre da iframe nello stesso padre:

window.parent.document.getElementById("content").src = "content.aspx?id=12";
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.