Window.location.href = window.location.href ve window.location.reload () arasındaki fark


196

JavaScript'ler arasındaki fark nedir

window.location.href = window.location.href

ve

window.location.reload()

fonksiyonlar?

Yanıtlar:


247

Doğru hatırlıyorsam, window.location.reload()POST verilerini içermezken geçerli sayfayı POST verileriyle yeniden yükler window.location.href=window.location.href.

Aşağıdaki yorumlarda @ W3Max tarafından belirtildiği gibi, URL'de window.location.href=window.location.hrefbir çapa (#) varsa sayfayı yeniden yüklemez window.location.reload()- Bu durumda kullanmalısınız .

Ayrıca, aşağıdaki @Mic tarafından belirtildiği gibi, tarayıcıyı kullanarak önbelleği atlayacak ve sayfayı sunucudan yeniden yükleyecek window.location.reload()ek bir argüman alır . tersini yapar ve mümkünse sayfayı önbellekten yükler.skipCachewindow.location.reload(true)window.location.reload(false)


11
Bir
POST'ta

3
@Wimmel, bu mesajı devre dışı bırakmanın bir yolu var mı?
Kris-I

40
window.location.href = window.location.href, URL'de bir çapa (#) varsa sayfayı yeniden yüklemez - Bu durumda window.location.reload () kullanmanız gerekir.
W3Max

5
Location.reload () öğesinin de tüm statik içeriği (ctrl + f5 stili sert yenileme gibi) yeniden yüklemeye zorlayacağını, ancak location.href'in href (veya yol adı veya URL) olarak ayarlanmasının önemli olmayabileceğini (ve gereksiz) bazı sayfalarda yükleme süresi farkı.
Rob Van Dam

2
@Wimmel Chrome: sayfayı bir GET Firefox ile yeniden yükler: önceki isteği yeniden yürütür, yani bir POST ise, verileri yeniden göndermek isteyip istemediğinizi soran hoş bir açılır pencere alırsınız
Juri

51

window.location.reload(true)Tarayıcının önbelleği atlayacağını ve sayfayı sunucudan yeniden yükleyeceğini söylerseniz . window.location.reload(false)tam tersini yapacak.

Not: defaultdeğer window.location.reload()ISfalse


5
@Ismail - Varsayılan değer yanlıştır.
Trevor

2
Google Chrome 32, webRTC'yi kullanırken doğru / yanlış benim için çalışmadı. WebRTC ile bir iframe vardı ve sadece kullanarak window.location.href = window.location.hrefhile yaptı.

Sayfada formda değişiklik yaptıysanız, değişiklikler olabilir kullanırken tarayıcıya bağlı olarak (önbelleğe değerlere geri alma) kaybolur location.reload()veya location.reload(false). Sayfanın tamamen yenilenmesini sağlamak için düğmesini kullanın location.reload(true).
Suncat2000

32

Fark şu ki

window.location = document.URL;

URL'de bir karma (#) varsa (bundan sonra veya sonra bir şey olmadan) sayfayı yeniden yüklemez

window.location.reload();

sayfayı yeniden yükleyecektir.


2
Tüm tarayıcılarda biten sorunlarla ilgili bu sorun yoktur. Bitiş karmaları sizin için bir sorun oluşturuyorsa şunu deneyin: window.location = document.URL.replace (/ # $ /, '');
Walter Stabosz

1
En azından Chrome endişe duyuyor. Eskiden location.href = location.hrefkabul ederdim, ama tam olarak bu davranışı fark ettim ve kelimeyi yaymak için SO'ya geldim. Bunun location.reload()yerine kullanın.
Pioul

1
Bu normal ifadeyi yazmak yerine window.location.pathname öğesini de kullanabilirsiniz. Örneğin:window.location.replace(window.location.pathname);
Arseny

20

Boole true değerini yeniden window.location.reload(true)yüklemeye eklerseniz, sunucudan yüklenir.

Bu booleanın ne kadar desteklendiği belli değil, W3Org NS'nin onu desteklemek için kullandığından bahsediyor

Window.location.href ve içeriği arasında farklılık olabileceğini document.URL orada location.href ve standart dışı ve kaldırılan arasında bir fark olarak kullanılan en azından - document.location'dan , yeniden yönlendirme ile yapmak zorunda ama bu gerçekten son binyıl.

Belgeleme amacıyla window.location.reload () kullanacağım çünkü yapmak istediğiniz buydu.


Farkı açıkladığından stackoverflow.com/a/5091619/429972 adresine bakın .
jontro

14

Daha önce belirtildiği gibi, url'de bir karma (#) olduğunda href'i değiştirmek sayfayı yeniden yüklemez. Böylece, bunu düzenli ifadeler yerine yeniden yüklemek için kullanıyorum:

if (!window.location.hash) {
    window.location.href = window.location.href;
} else {
    window.location.reload();
}

6

IE'de, özellikle IE9'da bazı anormal davranışları araştıran bu soruya rastladım, eski sürümleri kontrol etmedi. Anlaşılan

window.location.reload();

bir saniye boyunca tüm ekranı temizleyen bir yenileme ile sonuçlanır;

 window.location = document.URL;

sayfayı çok daha hızlı ve neredeyse algılanamayacak şekilde yeniler.

Biraz daha fazla araştırma yapmak ve kemancı ile bazı deneyler yapmak window.location.reload(), boolean'ı onunla geçseniz de geçmeseniz de önbelleği atlayacak ve sunucudan yeniden yüklenecek gibi görünüyor , bu tüm varlıklarınızı (resimler, komut dosyaları, stil sayfaları, vb.). Dolayısıyla, sayfanın HTML'yi yenilemesini istiyorsanız, window.location = document.URLçok daha hızlı ve daha az trafikle dönecektir.

Tarayıcılar arasındaki davranış farkı, IE9 yeniden yükleme yöntemini kullandığında görünür sayfayı temizliyor ve görünüşte sıfırdan yeniden oluşturuyor; burada FF ve krom, yeni varlıkları alana kadar ve farklıysa yeniden oluşturuyorlar.


window.location = document.URL sayfayı tıpkı window.location.reload () gibi yeniden yükler. En üste geri dönmeden veya söylediğiniz gibi fark edilmeden yenilenmek için son teknoloji ürünü bir durum var mı?
bigmugcup

6

Firefox'taki (12.0) bir fark, bir POST'tan oluşturulan bir sayfada, reload () öğesinin bir uyarı açması ve yeniden gönderme yapması, bir URL atamasının ise bir GET yapmasıdır.

Google Chrome her ikisi için de bir GET yapar.


1
Chrome 38 artık .reload () için POST kullanıyor gibi görünüyor.
Glen Little

3

JSF kullanarak, şimdi oturum süresi dolduktan sonra yenileme ile ilgili sorun yaşıyorum: sayfa yeniden yüklendikten sonra PrimeFaces ViewExpiredException ve bazı araştırma ile FireFox bir fark bulduk:

Arama window.location.reload(), FF'deki yenile simgesini tıklamak gibi çalışır, satırı ekler

Cache-Control max-age=0

ayar window.location.hrefURL satırında ENTER tuşuna basmak gibi çalışır, ancak bu satırı göndermez.

Her ikisi de GET olarak gönderilmesine rağmen, ilk (yeniden yükleme) önceki verileri geri yüklüyor ve uygulama tutarsız durumda.


1

Hayır, olmamalı. Bununla birlikte, bazı tarayıcılarda farklılıklar olabilir, bu nedenle ya (ya da hiçbiri) bazı durumlarda çalışmayabilir.


1

yaklaşık 3 yıllık tecrübemden, hiçbir fark bulamadım ...

edit: evet, bunlardan birinin söylediği gibi, sadece bir boolean parametresini window.location.reload () öğesine geçirmek farktır. true değerini iletirseniz , tarayıcı yeni bir sayfa yükler, ancak false olursa , önbellek sürümü yüklenir ...


0

Bizim durumumuzda sadece sayfayı web görünümünde yeniden yüklemek istiyoruz ve bazı nedenlerden dolayı nedenini bulamadık! Web'de bulunan hemen hemen her çözümü deniyoruz, ancak location.reload () veya window.location.reload (), location.reload (true), ... gibi alternatif çözümler kullanarak yeniden yükleme yapmadan sıkıştık.

İşte basit çözümümüz:

Bunun gibi boş "href" ilişkilendirme değerine sahip bir <a> etiketi kullanmanız yeterlidir:

< a href="" ...>Click Me</a>

(bazı durumlarda yeniden yüklemeyi tetiklemek için hedefin tıklanmasında "true return" kullanmanız gerekir)

Daha fazla bilgi için şu soruya bakın: Boş bir href geçerli mi?


-3

window.location.href, bu benim Android 5.1 web görünümünde hayatımı kurtardı. Bu sürümde sayfa Android'den location.reload () ile yeniden yüklenmiyor.

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.