2011-10-12 17 views
9

Bir sayfa bir # ile biten bir URL içeren bir iframe yüklediğinde, üst sayfa, iframe'in gövdesi tarayıcı penceresinin en üstünde olacak şekilde kaydırılır.Bir iframe'de # ankrajın tarayıcı penceresini kaydırmasını engelle

Demo: URL biter http://jsfiddle.net/dTQEE/1/

Eğer # yılında, örneğin http://foo.com#, tarayıcı sayfanın en üstüne gitmek istediğinizi varsayar.

Karma parçalı bir iframe yüklendiğinde ana pencerenin nasıl kaymasını engellersiniz?

Sorun, diğer tarayıcılarda bir sorun olup olmadığından emin olmadan Chrome'da gerçekleşir.

Şimdilik en iyi çözüm, scrollTop'u scrollTop değerini sıfırlamak için el.addEventListener('scroll', ...) kullanmaktır. 0 değil ise, bu çalışır, ancak aşağı kaydırma ve yukarı kaydırma her ikisi de çok dikkat çekicidir.

+1

Çerçeve için URL'yi nasıl alıyorsunuz? Yüklemeden önce kontrol etmek/düzenlemek mümkün değil mi? – sdleihssirhc

+1

Öneriniz için teşekkürler, ancak # siteyi alan için bir önemi olabilir. Iframe içindeki sayfadaki JS onu kullanıyor olabilir, bu yüzden tamamen kapatamıyorum. –

+0

bu sizin için hiç çözüldü mü? –

cevap

0

Bunun mümkün olduğundan emin değilsiniz, ancak window.onhashchange olayına dokunmayı ve varsayılanı önlemeyi denemelisiniz. Eğer değilse, herhangi bir şey tarafından takip edilmediyse karma kesmek zorunda kalacaksınız.

+0

Teşekkürler - Bunu daha önce denedim. Bir sayfanın karması değiştiğinde, onhashchange yalnızca kovulur, bu nedenle yüke ateşlenmez. –

+0

En azından kromda (diğer tarayıcılardan emin olmadığından), onhashchange olayı geçersiz olarak ayarlanabileceğinden, olayı önlemek için preventDefault özelliğini kullanamazsınız. –

0

Bunun eski bir soru olduğunu biliyorum, ama aynı soruyu araştırmam için buna rastladım. Chrome'da benim için harika çalışan bir çözüm buldum.

<a href="dummylink.html" onclick="someFunction(); return false;"> 

href bağlantı durum çubuğunda için kullanılır, ancak çünkü sonunda return false; dolayı aslında hiçbir yere gitmez. Daha sonra, yalnızca sizin yönlendirme işleminizi (benim durumumda document.formName.submit();) someFunction(); içinde gerçekleştirirsiniz. Bunu düşünmeye gelsene, her şeyi doğru sırayla yapabilirsin, ama yapacak tek bir şeyin olmadığı sürece bu gerçekten iyi bir form değil.

Not: senin someFunction(); sonunda return false; sahiptir, bu atlama önlemek için yeterli olmayacaktır.

İlgili konular