Jak mogę zmienić aktualny adres URL?


100

Mam następujący kod, który zmienia strony z poziomu JavaScript:

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

Ale nie zmienia górnego adresu URL, więc gdy ktoś kliknie przycisk Wstecz, nie wraca do poprzedniej strony.

Jak mogę zmienić w JavaScript również górny adres URL, aby przycisk Wstecz przeglądarki działał.

Odpowiedzi:



38

Proste przypisanie do window.locationlub window.location.hrefpowinno wystarczyć:

window.location = newUrl;

Jednak nowy adres URL spowoduje, że przeglądarka załaduje nową stronę, ale wygląda na to, że chciałbyś zmodyfikować adres URL bez opuszczania bieżącej strony. Masz na to dwie możliwości:

  1. Użyj skrótu adresu URL. Na przykład możesz przejść od example.comdo example.com#foobez ładowania nowej strony. Możesz po prostu ustawić, window.location.hashaby było to łatwe. Następnie należy odsłuchać hashchangezdarzenie HTML5 , które zostanie uruchomione, gdy użytkownik naciśnie przycisk Wstecz. Nie jest to obsługiwane w starszych wersjach IE, ale wypróbuj jQuery BBQ , dzięki czemu działa to we wszystkich przeglądarkach.

  2. Możesz użyć Historii HTML5, aby zmodyfikować ścieżkę bez ponownego ładowania strony. Umożliwi to zmianę z example.com/foona example.com/bar. Korzystanie z tego jest łatwe:

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

    Gdy użytkownik naciśnie „wstecz”, otrzymasz popstatezdarzenie okna , którego możesz łatwo odsłuchać (jQuery):

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

    Niestety jest to obsługiwane tylko w bardzo nowoczesnych przeglądarkach, takich jak Chrome, Safari i Firefox 4 beta.


metoda .replace na łańcuchach nie zmieni ciągu, do którego została zastosowana, wygeneruje nowy ciąg. " - window.location.replace()metoda nie jest taka sama jak String.prototype.replace()metoda, ponieważ window.locationnie jest ciągiem (jest obiektem). window.location.replace()zastępuje bieżący URL nowym, z jednoczesnym nadpisaniem starego adresu URL w historii.
Andy E

1
Dzięki za korektę, odpowiednio zaktualizuję swoją odpowiedź.
bcherry

2
Patrząc wstecz, to zdecydowanie najlepsza odpowiedź. document.location.href nie ma nic na pushState
buley

7

Hmm, użyłbym

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

Nie jestem do końca pewien, czy to masz na myśli.


7

Jeśli chcesz tylko zaktualizować ścieżkę względną, możesz to zrobić

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

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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.