Mevcut URL’yi nasıl değiştirebilirim?


100

Sayfaları JavaScript içinden değiştiren aşağıdaki koda sahibim:

var newUrl = [some code to build up URL string];
window.location.replace(newUrl);

Ancak en üstteki URL'yi değiştirmez, dolayısıyla birisi geri düğmesini tıkladığında önceki sayfaya geri dönmez.

JavaScript'in üst URL'yi değiştirmesini nasıl sağlayabilirim, böylece tarayıcı geri düğmesi çalışır.

Yanıtlar:



38

Basit atama window.locationveya iyi window.location.hrefolmalı:

window.location = newUrl;

Bununla birlikte, yeni URL'niz tarayıcının yeni sayfayı yüklemesine neden olacaktır, ancak mevcut sayfadan ayrılmadan URL'yi değiştirmek istiyorsunuz gibi görünüyor. Bunun için iki seçeneğiniz var:

  1. URL karmasını kullanın. Örneğin, gelen gidebilirsiniz example.comiçin example.com#fooyeni bir sayfa yüklemeden. Bunu window.location.hashkolaylaştırmak için basitçe ayarlayabilirsiniz . Ardından, hashchangekullanıcı geri düğmesine bastığında tetiklenecek olan HTML5 olayını dinlemelisiniz . Bu, IE'nin eski sürümlerinde desteklenmez, ancak bunun tüm tarayıcılarda çalışmasını sağlayan jQuery BBQ'ye bakın.

  2. Sayfayı yeniden yüklemeden yolu değiştirmek için HTML5 Geçmişini kullanabilirsiniz. Bu değiştirmek sağlayacak example.com/fookadar example.com/bar. Bunu kullanmak kolaydır:

    window.history.pushState("example.com/foo");

    Kullanıcı "geri" popstatedüğmesine bastığında, kolayca dinleyebileceğiniz pencere olayını alırsınız (jQuery):

    $(window).bind("popstate", function(e) { alert("location changed"); });

    Ne yazık ki, bu yalnızca Chrome, Safari ve Firefox 4 beta gibi çok modern tarayıcılarda desteklenmektedir.


dizelerdeki .replace yöntemi, uygulandığı dizeyi değiştirmez, yeni bir dize oluşturur. " - window.location.replace()yöntem, yöntemle aynı değildir String.prototype.replace()çünkü window.locationbir dize değildir (bu bir nesne). window.location.replace()geçerli olanı değiştirir Geçmişteki eski URL girişinin üzerine yazarken yenisiyle URL.
Andy E

1
Düzeltme için teşekkürler, cevabımı buna göre güncelleyeceğim.
bcherry

2
Geriye dönüp baktığımızda, bu açık ara en iyi cevaptır. document.location.href'in pushState ile ilgili hiçbir bilgisi yok
buley

7

Hmm, kullanırdım

window.location = 'http://localhost/index.html#?options=go_here';

Kastettiğin bu mu tam olarak emin değilim.


7

Sadece göreli yolu güncellemek istiyorsanız, şunu da yapabilirsiniz:

window.location.pathname = '/relative-link'

"http://domain.com" -> "http://domain.com/relative-link"


0
<script> 
    var url= "http://www.google.com"; 
    window.location = url; 
</script> 
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.