Javascript: location.href ve location ayarlama


311

Ne zaman ayar locationyerine bir URL dizesi ayarlarsınız location.href?

location = "http://www.stackoverflow.com";

vs

location.href = "http://www.stackoverflow.com";

Mozilla Geliştirici Ağı Referansı


6
location.hrefaynı menşe politikası nedeniyle posta ayarı başarısız oldu: javascript.info/tutorial/…
Taha Jahangir


1
TypeScript 2.6.2 kullanan bir Açısal 4 uygulamam var. window.location salt okunurdur ve derleyici hataları yeniden oluşturulmadan sadece window.location.href (açısal abonelikten gelen bir geri arama bağlamında) kullanarak atayabilirim - belki bir tür JavaScript 1.0 uyumluluk şey veya asenkron işleme ile ilgili . Temelde window.location.href her zaman çalışan tek şey gibi görünüyor.
Chris Halcrow

Yanıtlar:


261

locationDoğrudan ayarlayabilirsiniz çünkü biraz daha kısa. Kısa olmaya çalışıyorsanız, genellikle de atlayabilirsiniz window..

Her iki URL atamaları location.hrefve locationgeri Netscape 2'de, JavaScript 1.0 çalışmalarına tanımlanır ve bu yana her tarayıcıda uygulanmaktadır. Seçiminizi yapın ve hangisini daha net bulursanız kullanın.


9
Aşağıdaki cevapta @SwissMister tarafından belirtildiği gibi, window.location.href bir şekilde bir XHR isteği gibi muamele görüyor gibi görünüyor. Bir XHR'nin başarılı geri çağrısından ateşlenirse, window.location bir bağlantıya tıklandığında öykünürken window.location.href bir XHR olarak değerlendirilir.
Akshay Raje

147

Her ikisi de çalışsa bile ikincisini kullanırdım. locationbir nesnedir ve bir nesneye dize atamak okunabilirlik veya bakım açısından iyi sonuç vermez.


60
Karmaşık bir PayPal entegrasyonu uygularken, kullanmak için çok zorlayıcı bir nedenle karşılaştım window.location: gerektirmezSAME ORIGIN .
Swiss Mister

4
Belki de sadece ben ama location = 'http://www.example.com'süper okunabilir görünüyor. Gerçi, özel bir durum olarak. Bu geriye dönük olarak uyumludur ve öngörülebilir gelecekte de uyumlu kalacaktır .
Alex W

10
Window.location bir nesne olsaydı, ona bir dize atamak bir dize ile üzerine yazılır. Aslında window.location, alıcı ve ayarlayıcı yöntemlerine sahip bir özelliktir. Ayarladığınızda, bir dize bekleniyor ve genel Konum nesnesi ayarlayıcı tarafından güncelleniyor. Bunu aldığınızda genel Konum nesnesi döndürülür.
JukkaP

64

Daha önce de söylendiği gibi location, bir nesne . Ama o kişi ikisini de kullanmayı önerdi. Ancak, .hrefsürümü kullanmak için daha iyisini yapacaksınız .

Nesneler, başka bir şey belirtilmezse varsayılan olarak kabul edilen varsayılan özelliklere sahiptir. locationNesne durumunda, adlı bir özelliği vardır .href. Ve atama sırasında HERHANGİ bir özellik belirtilmezse, varsayılan olarak "href" varsayılır.

Daha sonraki bir nesne modeli sürümü değişinceye ve artık varsayılan bir özellik kalmayana veya varsayılan özellik değiştirilinceye kadar bu iyi ve iyidir. Ardından programınız beklenmedik şekilde kesiliyor.

Eğer demek hrefistiyorsan, belirtmelisin href.


13
İyi açıklama, okunabilirlik veya bakım hakkındaki genel yorumlardan daha iyi. Gerçekte bu özel durumda nesne modeli değişmeyecektir, çünkü ağın yarısı durur - bu nedenle ikisini de kullanın ... hangisi önemli değil
Neromancer

71
Bu kulağa hoş geliyor ama gerçek değil. Genel olarak DOM veya JavaScript'te varsayılan özellik kavramı yoktur. locationÖzelliği bu özel atama davranışını JavaScript 1.0 ve bu tarayıcıyı uyguladığından beri her tarayıcıda geri alacak şekilde tanımlandığından , çalışmalara bir dize atama . HTML5 şimdi gerektiriyor. Bu nedenle, atanması daha güzel veya daha tutarlı olsa .hrefda, bunu yapmanın geriye veya ileri uyumluluk avantajı yoktur.
bobince

6
güzellik sayar.
Tom Andersen

4
window.location = urlgüzel
Eric Muyser

21
location = urldaha sevimli
fregante

20

Birkaç yıl önce, locationIE'de benim için çalışmadı ve location.hrefyaptı (ve her ikisi de diğer tarayıcılarda çalıştı). O zamandan beri her zaman kullandım location.hrefve bir daha hiç sorun yaşamadım. Hangi IE sürümü olduğunu hatırlayamıyorum.


42
Muhtemelen bir şey yanlış yaptığı IE bir sürümü ve diğer her tarayıcı doğru yaptı. ;-)
Shawn D.8

9
içinde strict modesen doğrudan atamak çalışırsanız krom bir istisna durumu locationçok hep kullanmak bu nedenle,location.href
Hashbrown

9
IE "bir" sürümü?
Lpc_dark

@Shawn D. Bir tarayıcı işleri doğru yapıyor mu? Bu ne zaman oldu! : D
user2173353

15

Sadece açıklığa kavuşturmak için yapamazsınız location.split('#'), locationbir dize değil, bir nesnedir. Ama yapabilirsiniz location.href.split('#');çünkü location.hrefbir dize.


3
Yorumunuz doğrudur, ama sen neden bahsediyorsun alma yeri nesnesinin href niteliğini, bir dize. Diğer tüm tartışmalar, değeri okumakla değil, bir değer atamakla ilgilidir . Ama haklısın. Fark, href bir dize, konum ise bir nesnedir.
Phil DD

15

Akılda tutulması gereken bir fark var.

Mevcut URL'yi kullanarak bir URL oluşturmak istediğinizi varsayalım. Aşağıdaki kod aslında sizi yönlendirecektir, çünkü çağırmıyor String.replaceama Location.replace:

nextUrl = window.location.replace('/step1', '/step2');

Aşağıdaki kodlar çalışır:

// cast to string
nextUrl = (window.location+'').replace('/step1', '/step2');

// href property
nextUrl = window.location.href.replace('/step1', '/step2');

3

TypeScript ile teknik window.location.hrefolarak window.locationaşağıdakileri içeren bir nesne kullanılır:

Properties
hash 
host 
hostname
href    <--- you need this
pathname (relative to the host)
port 
protocol 
search 

Ayar window.location, bir window.location.hrefstring türünde iken bir type hatası üretecektir .

Kaynak

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.