2013-08-08 15 views
7

Ich öffne ein Popup von meiner Haupt-Seite mit Code wie folgt trennen:JavaScript Pop-up von 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> 

Dies funktioniert gut, aber mein Problem ist, dass das Dokument, das in den Popup-Fenstern geladen wird hat die Erlaubnis, den Ort des Öffnerfensters zu ändern. Dies funktioniert sogar, wenn das Dokument im Popup aus einer anderen Domäne stammt. Es hat keine Erlaubnis, den Standort zu lesen, aber es ist erlaubt, den Standort zu ändern. Ich will das nicht. Ich möchte, dass das Popup vollständig von meiner Hauptseite getrennt wird.

Auch ohne JavaScript funktioniert es nicht. Wenn ich die andere Seite in einem neuen Tab öffnen, indem Sie mit dem target="_blank" Attribute dann wird dieser Registerkarte noch erlaubt zum opener Fenster zu navigieren und seine Position ändern:

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

Dies ist der Code in dem geöffneten Dokument ist, das sollte nicht erlaubt sein:

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

Sie eine Live-Demo here sehen können. Klicken Sie auf einen der beiden Links, um eine andere Seite in einem Popup oder einer neuen Registerkarte zu öffnen, die dann eine dritte Seite in das Öffnerfenster lädt. Das versuche ich zu verhindern.

Gibt es einen Trick, mit dem ich die Verbindung zwischen dem Öffnerfenster und dem geöffneten Fenster aufheben kann? Im Idealfall sollte das geöffnete Fenster nicht wissen, dass es überhaupt von einem anderen Fenster geöffnet wurde.

+0

Sie sind sicher, Sie haben keine Einstellungen für diese Domains. Einer ist eine Subdomain des anderen und mit bestimmten Einstellungen haben Sie Zugriff auf die andere Domain. – putvande

+0

@putvande Ja, da bin ich mir sicher. Die Demo verwendet verschiedene Subdomains (Weil ich nur Zugang zu einer Domain habe). Aber das eigentliche Problem auf einem Produktionsserver verwendet völlig andere Domänen und es gibt keine besonderen Regeln überall. Das geöffnete Fenster hat keine Berechtigungen zum Lesen oder Aufrufen von irgendetwas aus dem Öffnerfenster, so dass die gleichen Ursprungsbeschränkungen korrekt funktionieren. Sie gelten nur nicht für das ÄNDERN des location href des Opener-Fensters. – kayahr

Antwort

14

Wenn die Seite in dem untergeordneten Fenster in Ihrer Kontrolle ist, können Sie null zuweisen, um den Opener in den Kindern Seite:

window.opener = null; 

Indem dies als erste Anweisung in Ihrem Javascript.

Wenn die Seite nicht in Ihrer Kontrolle oder in einer anderen Domäne ist, tun Sie es dann beim Öffnen:

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

Leider ist es nicht unter meiner Kontrolle.Ich habe sogar versucht, zuerst eine Zwischenseite zu öffnen, die 'window.opener' auf' null' setzt und dann die andere Seite lädt. Hat nicht funktioniert, 'window.opener' wird vom Browser wiederhergestellt, wenn die neue Seite geladen wird. – kayahr

+0

@kayahr Antwort aktualisiert. Das sollte funktionieren. – Abhitalks

+1

Einfach und elegant. Funktioniert perfekt. Vielen Dank! – kayahr