2010-10-02 15 views
66

Mam następujący kod, który zmienia strony z poziomu JavaScriptu:Jak zmienić stronę z poziomu JavaScriptu

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

Ale to nie zmienia górną URL, więc gdy ktoś kliknie przycisk Wstecz nie robi” t wróć do poprzedniej strony.

W jaki sposób mogę zmienić JavaScript górnego adresu URL, a także przycisk wstecz przeglądarki działa.

Odpowiedz

7

Hmm, chciałbym użyć

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

28

Proste przypisanie do window.location lub window.location.href powinno być dobrze:

window.location = newUrl; 

Jednak nowy adres URL spowoduje przeglądarkę, aby załadować nową stronę, ale to brzmi jak chcesz zmodyfikować adres URL bez wychodzenia bieżąca strona. Dostępne są dwie opcje:

  1. Użyj skrótu adresu URL. Na przykład możesz przejść z example.com do example.com#foo bez ładowania nowej strony. Możesz po prostu ustawić window.location.hash, aby było to łatwiejsze. Następnie należy wysłuchać zdarzenia HTML5 hashchange, które zostanie uruchomione, gdy użytkownik naciśnie przycisk Wstecz. Nie jest to obsługiwane w starszych wersjach IE, ale sprawdź pod numerem 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/foo na example.com/bar. Używanie tego jest proste:

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

    Gdy użytkownik naciśnie klawisz "wstecz", będziesz odbierać okna popstate wydarzenie, które można łatwo sł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 wersja beta przeglądarki Firefox 4.

+0

* metoda .replace na łańcuchach nie zmieni ciąg było stosowane, wygeneruje nowy ciąg. "* - metoda' window.location.replace() 'nie jest tym samym, co metoda' String.prototype.replace() ', ponieważ' window.location' nie jest ciągiem znaków (to obiekt). 'window.location.replace()' zastępuje bieżący URL nowym, podczas gdy nadpisanie wpisu starego adresu URL w historii. –

+1

Dzięki za poprawkę, uaktualnię odpowiednio moją odpowiedź. – bcherry

+2

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

5

Jeśli chcesz po prostu zaktualizować ścieżkę względną można też zrobić

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

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

Powiązane problemy