2013-08-08 16 views
7

böyle koduyla benim ana sayfasından bir açılır pencere açıyorum JavaScript pop-up bağlantısını kesmek için:açacağı

<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> 

Bu iyi çalışır, ama benim sorun olduğunu pop-up pencerede yüklenen belge Açıcı penceresinin yerini değiştirme izni vardır. Bu, açılır penceredeki belge farklı bir alandan olduğunda bile çalışır. Konumu okuma izni yoktur, ancak konumu değiştirmesine izin verilir. Bunu istemiyorum. Pop-up'ın ana sayfamdan tamamen bağlantısı kesilmesini istiyorum.

JavaScript olmadan bile çalışmıyor. Daha sonra bu sekme hala opener pencereye gidin ve konumunu değiştirmeye izin target="_blank" özelliğini kullanarak yeni bir sekmede başka sayfasını açtığınızda:

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

Bu açılan belgede kodun bulunduğu olmamalı izin verilmesi: canlı bir demo here görebilirsiniz

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

. Açılır pencerede başka bir sayfa açmak için iki bağlantıdan birini veya açıcı penceresinde üçüncü bir sayfa yükleyen yeni bir sekmeyi tıklatın. Bunu engellemeye çalışıyorum.

Açıcı pencere ile açık pencere arasındaki bağlantıyı kesmek için kullanabileceğim bir numara var mı? İdeal olarak açılan pencere, başka bir pencere tarafından açıldığını bilmemelidir. Çocuk penceresinde sayfayı kontrolünde ise

+0

kullandığınız her yerde Yani düzeltme rel="noreferrer noopener" do Bu alanlarda herhangi bir ayarınız yok. Biri diğerinin bir alt alan adıdır ve belirli ayarlarla diğer alana erişim izni verilir. – putvande

+0

@putvande Evet, eminim. Demo, farklı alt alan adları kullanır (Çünkü tek bir alana erişebiliyorum). Ancak bir üretim sunucusundaki asıl sorun tamamen farklı alanlar kullanıyor ve hiçbir yerde özel bir kural yok. Açılan pencerede, açıcı penceresinden bir şey okumak veya çağırmak için herhangi bir izin yoktur, bu nedenle aynı menşe kısıtlamaları doğru şekilde çalışıyor. Sadece açıcı penceresinin konum hrefini DEĞİŞTİRMEK için başvuruyorlar. – kayahr

cevap

14

, alt sayfasında açacağı için boş atayabilirsiniz:

window.opener = null; 

sizin javascript ilk ifadesi olarak yaparak. sayfayı kontrolünde değilse veya farklı bir etki alanında ise

ardından açılış sırasında bunu:

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

Maalesef kontrolüm altında değil.Önce window.opener öğesini 'null' olarak ayarlayan ve ardından diğer sayfayı yükleyen bir ara sayfa açmayı bile denedim. Yeni sayfa yüklendiğinde, 'window.opener' tarayıcı tarafından restore edildi. – kayahr

+0

@kayahr Yanıtlandı. Bu çalışmalı. – Abhitalks

+1

Basit ve zarif. Mükemmel çalışıyor. Teşekkürler! – kayahr