2010-10-02 14 views
66

Ich habe den folgenden Code, der die Seiten von innen JavaScript ändert:Wie Seite wechseln innerhalb JavaScript

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

Aber es ist nicht die Top-URL ändern, so dass, wenn jemand die Zurück-Schaltfläche klickt es doesn‘ t gehe zurück zur vorherigen Seite.

Wie kann ich JavaScript ändern Sie auch die Top-URL, so dass der Browser zurück-Taste funktioniert.

Antwort

7

Hmm, ich würde

Ich bin nicht ganz sicher verwenden, wenn das, was Sie meinen.

28

einfache Zuordnung zu window.location oder window.location.href sollte in Ordnung sein:

window.location = newUrl; 

jedoch Ihre neue URL wird der Browser die neue Seite zu laden, aber es klingt wie Sie die URL ändern möchten, ohne sich die aktuelle Seite Sie haben dafür zwei Möglichkeiten:

  1. Verwenden Sie den URL-Hash. Zum Beispiel können Sie von example.com zu example.com#foo gehen, ohne eine neue Seite zu laden. Sie können einfach window.location.hash einstellen, um dies zu vereinfachen. Dann sollten Sie sich das HTML5-Ereignis hashchange anhören, das ausgelöst wird, wenn der Benutzer die Zurück-Schaltfläche drückt. Dies wird nicht in älteren Versionen von IE unterstützt, aber überprüfen Sie jQuery BBQ, die dies in allen Browsern funktioniert.

  2. Sie können den HTML5-Verlauf verwenden, um den Pfad zu ändern, ohne die Seite neu zu laden. Dadurch können Sie von example.com/foo zu example.com/bar wechseln. Mit diesem ist einfach:

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

    Wenn der Benutzer "zurück", können Sie die popstate Veranstaltung Fenster erhalten werden, die Sie leicht zu (jQuery) hören:

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

    Leider wird dies nur in sehr modernen Browsern wie Chrome, Safari und Firefox 4 Beta unterstützt.

+0

* die .replace Methode zum Umhängen es wird eine neue Zeichenkette erzeugen. "* - Die' window.location.replace() 'Methode ist nicht die selbe wie die' String.prototype.replace() 'Methode, da' window.location' keine Zeichenkette ist (es ist ein Objekt). 'window.location.replace()' ersetzt die aktuelle URL durch eine neue, während Überschreiben des alten URL-Eintrags im Verlauf. –

+1

Danke für die Korrektur, ich werde meine Antwort entsprechend aktualisieren. – bcherry

+2

Rückblickend ist dies bei weitem die beste Antwort. document.location.href hat nichts auf pushState – buley

5

Wenn Sie gerade auch tun

es wurde nicht die Zeichenfolge ändern angewendet können Sie den relativen Pfad aktualisieren möchten,

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

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

Verwandte Themen