JavaScript'te window.navigate veya document.location kullanmalı mıyım?


177

Geçerli web sayfasının konumunu JavaScript kullanarak değiştirmek için kullanılacak tercih edilen yöntem nedir? Ben hem window.navigate hem de document.location kullanıldığını gördüm. Davranışta herhangi bir fark var mı? Tarayıcı uygulamalarında farklılıklar var mı?

Yanıtlar:


220
window.location.href = 'URL';

geçerli pencerenin konumunu değiştirmek için kullanılan standart uygulamadır.


22
Window.location.href dosyasının standart uygulama olduğunu belirten bir referansınız var mı? Ve bu standart tüm tarayıcılar için aynı derecede geçerli mi? Kesinlikle bilgili görünüyorsunuz ve 15+ oy (artı kabul edilen cevap), daha yetkili kılınmasına yardımcı oluyor, ancak iddiayı yedeklemek için tarayıcı geliştirme ekiplerinin belgelerini görmenin daha iyi olacağını düşünüyorum.
Goyuix

6
@ Goyuix, muhtemelen window.location.hreftam bir uygulama olduğunu söylemek daha doğru , ancak window.locationaynı şeyi başarıyor. Bkz. Docs.sun.com/source/816-6408-10/location.htm : "Bir locationnesnenin özelliğine bir dize atarsanız , JavaScript bir locationnesne oluşturur ve bu dizeyi hrefözelliğine atar ."
James Skidmore

3
Bu adamların kişisel tercihi olduğuna karar vermiş gibi görünüyor: developer.mozilla.org/Talk:en/DOM/window.location . Veya en alttaki örneğe bakın, yalnızca kullanırlar, window.locationancak bu her iki şekilde de olması gerekmez: developer.mozilla.org/en/window.location .
James Skidmore

1
Şu anda android geliştirme için kullanıyorum. Sayfayı Android'in varsayılan tarayıcısında JS'den yönlendirmek için sorun yaşıyorum. Denedim window.location.href = 'URL';ve ayrıca window.location.assign('URL');yeni bir sayfayı yeniden yüklemek için tasarlanmış yöntem. Daha fazla bilgi bulunabilir w3schools.com/jsref/obj_location.asp
philipp

3
window.navigateInternet Explorer tarafından kullanılan özel bir yöntemdir (diğer tarayıcıların uyumluluk için taklit edip etmediğinden eminim, Chrome bunu yapmaz). document.locationveya window.locationstandart nesnelerdir (çeşitli HTML / HTML5 / DOM spesifikasyonlarına bakın). document.location = someURL(veya window.location = someURL) büyük olasılıkla eski kod nedeniyle destekleniyor. Bunu yapmanın doğru yolu document.location.href = someURL, belki de document.location.assign(someURL).
PhistucK

11

window.navigate bazı tarayıcılarda desteklenmiyor

Java betiğinde yeniden yönlendirme için birçok yol vardır, aşağıdaki koda ve açıklamaya bakın

window.location.href = "http://krishna.developerstips.com/";
window.location = "http://developerstips.com/";
window.location.replace("http://developerstips.com/");
window.location.assign("http://work.developerstips.com/");

window.location.href sayfayı tarayıcının önbelleğinden yükler ve her zaman isteği sunucuya göndermez. Bu nedenle, sayfanın önbelleğinde eski bir sürümü varsa, sunucudan yeni bir sayfa yüklemek yerine oraya yönlendirir.

Kullanıcının orijinal belgeye geri dönmek için geri düğmesini kullanmasına izin vermek istiyorsanız window.location.assign () yöntemi.

window.location.replace () yöntemini kullanarak yeni bir sayfaya yönlendirmek istiyorsanız ve kullanıcının geri düğmesini kullanarak orijinal sayfaya gitmesine izin vermiyorsanız.


7

document.locatio n, (kullanımdan kaldırılmış ancak hala mevcut) salt okunur bir dize özelliğidir ve document.url ile değiştirilir .


6

window.location ayrıca çerçeveyi etkiler,

bulduğum en iyi form:

parent.window.location.href

Ve daha da kötüsü:

parent.document.URL 

Ben büyük bir tarayıcı testi yaptım ve birkaç eklentisi ile bazı nadir IE ikinci formu ile tanımsız olsun.


Bu mantıkla, top.window.location.href daha iyi olmaz mıydı?
Orwellophile

6

window.locationtarayıcı hedefinizi etkiler. document.location yalnızca tarayıcınızı ve çerçevenizi / iframe'inizi etkiler.


4

window.navigatebazı tarayıcılarda DESTEKLENMEMEKTEDİR, bu nedenle bunlardan kaçınılmalıdır. Location özelliğini kullanan diğer yöntemlerden herhangi biri en güvenilir ve tutarlı yaklaşımdır


2

Ben giderdim window.location = "http://...";. Tarayıcılar arası JavaScript'i birkaç yıldır kodluyorum ve bu yaklaşımı kullanırken hiç sorun yaşamadım.

window.navigateve window.location.hrefbana biraz tuhaf geliyor.


13
window.location çalışıyor, ancak "location" bir nesne olduğu için teknik olarak yanlış.
James Skidmore

16
Ancak JavaScript'teki her şey bir nesnedir :)
cllpse

1
Hemen hemen her şey JavaScript'teki bir nesne olsa da, bir nesneye bir dize atamak değeri genellikle özelliklerinden birine ayarlamaz (window.location veya document.location gibi href özellikleriyle yapar), ancak bunun yerine bu nesneyi bir dize. Bu durumda, mevcut (ilginç) uygulamalarla ve eski (ve çok eski olmayan) içerikle uyumlu olması için bir tarayıcı tuhaflığı eklendi.
PhistucK

1

Gerçekten bir fark yok; bunu yapmak için yaklaşık 5 farklı yöntem vardır. Ancak, en sık gördüklerim document.locationve window.locationtüm büyük tarayıcılar tarafından desteklendikleri için. (Şahsen window.navigateüretim kodunda hiç kullanıldığını görmedim , bu yüzden belki de çok iyi bir desteği yok?)


document.location tüm tarayıcılarda çalışmaz. window.location yapar.
Philippe Leybaert

2
Firefox window.navigate'i desteklemiyor
Andrew Harry


-5

Sayfanızı kullanarak

window.location.href =Url;

3
Bu gerçekten kabul sonra daha fazla bilgi eklemek değil, ve upvoted cevap çarpın ...
Stuart Siegler

3
Hatta daha ileri gidebilir ve kabul edilen cevabı intihal ettiğinizi iddia edebilirsiniz
Liam
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.