Üst pencereyi bir iframe eyleminden yönlendir


312

Bir üst pencereyi iframe'den yeniden yönlendirmek için hangi JavaScript'i kullanmam gerekir?

JavaScript veya başka bir yöntem kullanarak üst pencereyi yeni bir URL'ye yönlendiren bir köprüyü tıklatmalarını istiyorum.


5
Ebeveyn penceresi, kendi içinde bir olabilir IFramede. Kabul edilen cevap üst pencereye hitap ettiği için, sorunuzu biraz değiştirmenizi öneririm.
Ron Klein

Yanıtlar:


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

Daha önce belirtildiği gibi, üst iframe'i yönlendirecektir.


Aynı köken politikasının burada da geçerli olduğunu düşünmüyorum. Sitenizi başkasının iframe'inden ayırabilmeniz mantıklıdır.
Brian McAuliffe

1
Chrome'da @Parris jsfiddle şu hatayı atar: Güvenli olmayan JavaScript, ' parrisstudios.com/tests/iframe_redirect.html ' URL'si olan çerçeveden ' jsfiddle.net/ppkzS ' URL'si olan çerçeve için gezinmeyi başlatmaya çalışır . Üst düzey pencerede gezinmeyi deneyen çerçeve korumalı alanlıdır, ancak 'üstte gezinmeye izin ver' bayrağı ayarlanmamıştır.
Bjarte Aune Olsen

1
@BjarteAuneOlsen ilginç, krom veya webkit'te yeni bir değişiklik olabilir. Kesinlikle daha önce çalışıyordu. Birkaç yıl oldu :). Ayrıca yanıt, daha önce yanıtı yanlış yapan, ancak şimdi doğru ve yorumum yanlış -_- yapan aynı köken politikasının uygulandığını belirtmek için kullanılır.
Parris

4
@BjarteAuneOlsen - Bunun nedeni, JSFiddle'daki Iframe'lerin kasıtlı olarak kum havuzuna alınmış olması nedeniyle belirli özellikleri (yönlendirme vb.) Açıkça reddettikleri için - JS'yi JS Fiddle'dan uzaklaşmak ve işinizi kaybetmek için kullanacağınız bir tehlike olduğuna inanıyorum. ..
Zhaph - Ben Duguid

10
İnsanların burada karşılaştığı hatalar, " sandbox" adlı iframe'ler için yeni bir HTML5 özelliğinden kaynaklanıyor - developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe Bu sandboxözellik, javascript'in iframe tabanlı bazı işlemleri yapmasını engelliyor izin verilen eylemlerin belirli bir beyaz listesinde. allow-top-navigationMülkiyet işyerinde için bu kodu verir beyaz listesi içinde etkinleştirebilirsiniz eylemlerden biridir. sandboxÖzellik yoksa tüm eylemlere izin verilir. Varsa ve boş bir dize varsa, tüm eylemler reddedilir.
Marcus Harrison

115

Bunun da <a href="..." target="_top">link</a>işe yaradığını gördüm


7
Seçilen cevap doğru olsa da, bu sorunun soru için daha iyi bir cevap olduğunu düşünüyorum. Ayrıca, JS'yi devre dışı bırakan kişiler için de çalışır.
Michael - Clay Shirky

Bunun en iyi çözüm olduğunu kabul ediyorum, ancak OP özellikle javascript istedi. Öte yandan, OP, bir çapa ile tetiklenmesi gerektiğini belirtti - İstenen sonucu elde etmek için bir çapa etiketinden javascript kullanmaya zorlanacağı bir senaryo göremiyorum, çünkü soru yanıltıcıdır.
nocarrier

2
Çok basit ve zarif. Cazibe gibi çalışır :)
Yash

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

window.top kareler hiyerarşisinin en üstünde sayfanın pencere nesnesini ifade eder.


9
window.top.location.href özelliği Iframe'den güncellenemez, erişim reddedilen yürütmeyi başlatır. Yalnızca localhost üzerinde test yaparken çalıştırılabilir
Muhammad Ummar

4
@Ummar: Üst çerçeve bir iframe aynı etki alanına, aynı bağlantı noktasına (aynı kaynak ilkeleri) sahipse, güvenlik ihlallerini önlemek için farklı olduklarında erişim reddedildi istisnası atarsa ​​bunu eklerim
Quan Mai

5
@Ummar doğru değil, kanıt için jsfiddle.net/ppkzS . Window.top.location.href dosyasını değiştirebilirsiniz. Sadece okuyamazsın. Krom ile çalışır.
Parris

Benim için yerleşen büyük jsfiddle @Parris :)
Max Williams

2
Bazı şüpheler iframe içinde böyle bir şey çalışıyor olabilir şüpheli: window.top.location.href = window.top.location.href ;
mjj1409


15

target="_parent"benim için harika çalıştı. kolay ve sorunsuz!


Bunlar harika çalışıyor gibi görünüyor. Javascript yerine bu yöntemi kullanmanın bir dezavantajı var mı?
flyingL123

bildiğim kadarıyla hayır. Bir şey bulursanız paylaşın.
rDroid

7

@MIP doğru, ancak Safari'nin daha yeni sürümlerinde, iFrame'e yeniden yönlendirme erişimi vermek için sanal alan özelliği (HTML5) eklemeniz gerekecek. Aralarında boşluk bırakarak eklenebilecek birkaç belirli değer vardır.

Referans (kaydırmanız gerekecektir): https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe

Ör:

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

sandboxÖzniteliğin, içindeki içerik için ek bir kısıtlamalar kümesi sağladığını unutmayın <iframe>. Özelliğin değeri sandboxbelirli kısıtlamaları kaldırır. Bu özelliği kullanarak dikkat edin. w3schools.com/tags/att_iframe_sandbox.asp
gitaarik

3

Bu sefaleti çözecektir.

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

3

Kullanıcının herhangi bir şey yapmasına gerek kalmadan başka bir alana yönlendirmek isterseniz mülkle bir bağlantı kullanabilirsiniz:

target="_parent"

Daha önce de belirtildiği gibi kullanın ve ardından şunu kullanın:

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

otomatik olarak yönlendirmesini sağlamak için.

Misal:

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

Not: Javascript click () komutu, bağlantıyı bildirdikten sonra gelmelidir.


1

Bir iframe'den yeniden yönlendirmek mümkündür, ancak üst öğeden bilgi almak mümkün değildir.


0

Kullanmayı deneyin

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

Basit sürüm: parent.window.location = '<URL>';
shasi kanth

1
veya daha da basitleştirilmiş:parent.location = 'url'
44'te ızgara


-2

Üst pencereyi bir iframe eyleminden yeniden yönlendirmek için window.top.location.href kullanmamız gerekir.

Demo URL'si :


1
Biz kimiz? :) Lütfen url'den gerekli parçaları cevaba yazabilir misiniz? URL'ler / bağlantılar değişebilir veya silinebilir.
YesThatIsMyName

-8

Üst pencerede iframe'i aynı üst öğedeki iframe'e yönlendirin:

window.parent.document.getElementById("content").src = "content.aspx?id=12";
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.