2013-08-08 22 views
7

sto aprendo un popup dalla mia pagina principale con codice come questo:Come scollegare popup JavaScript da opener

<a href="http://external.domain.tld/" 
    onclick="window.open(this.href, '_blank', 
     'width=512,height=512,left=200,top=100');return false"> 
Open popup 
</a> 

Questo funziona bene, ma il mio problema è che il documento che viene caricato nella finestra pop-up ha il permesso di cambiare la posizione della finestra di apertura. Funziona anche quando il documento nel popup proviene da un dominio diverso. Non ha il permesso di leggere la posizione ma è consentito modificare la posizione. Non lo voglio Voglio che il popup sia completamente disconnesso dalla mia pagina principale.

Anche senza JavaScript non funziona. Quando apro l'altra pagina in una nuova scheda utilizzando l'attributo target="_blank" allora questa scheda è ancora permesso di navigare nella finestra opener e cambiare la sua posizione:

<a href="http://external.domain.tld/" target="_blank"> 
    Open in new tab 
</a> 

Questo è il codice nel documento aperto, che non dovrebbe essere consentito:

<script> 
    opener.location.href = "http://badsite.tld/"; 
</script> 

È possibile visualizzare una demo dal vivo here. Fare clic su uno dei due collegamenti per aprire un'altra pagina in un popup o in una nuova scheda che carica una terza pagina nella finestra di apertura. Questo è quello che sto cercando di prevenire.

C'è qualche trucco che posso usare per interrompere la connessione tra la finestra di apertura e la finestra aperta? Idealmente la finestra aperta non dovrebbe sapere che è stata aperta da qualsiasi altra finestra.

+0

Siete sicuri non hai impostazioni su quei domini. Uno è un sottodominio dell'altro e con impostazioni specifiche è consentito l'accesso all'altro dominio. – putvande

+0

@putvande Sì, ne sono sicuro. La demo utilizza diversi sottodomini (perché ho solo accesso a un dominio). Ma il vero problema su un server di produzione utilizza domini completamente diversi e non ci sono regole speciali da nessuna parte. La finestra aperta non ha permessi di leggere o chiamare nulla dalla finestra di apertura, quindi le stesse restrizioni di origine funzionano correttamente. Semplicemente non si applicano a CAMBIARE l'href della posizione della finestra di apertura. – kayahr

risposta

14

Se la pagina nella finestra del bambino è in vostro controllo, è possibile assegnare null per la gara di apertura nella pagina figlio:

window.opener = null; 

Facendo questo come la prima dichiarazione in Javascript.

Se la pagina non è nel vostro controllo o si trova in un dominio diverso, allora fatelo aperta:

popup = window.open(this.href, '_blank', 'width=512,height=512,left=200,top=100'); 
popup.opener = null; 
+0

Purtroppo non è sotto il mio controllo.Ho anche provato ad aprire prima una pagina intermedia che imposta 'window.opener' su' null' e quindi carica l'altra pagina. Non ha funzionato, 'window.opener' viene ripristinato dal browser quando viene caricata la nuova pagina. – kayahr

+0

@kayahr Risposta aggiornata. Questo dovrebbe funzionare. – Abhitalks

+1

Semplice ed elegante. Funziona perfettamente. Grazie! – kayahr

Problemi correlati