2010-10-02 33 views
66

Ho il seguente codice che modifica le pagine dall'interno di JavaScript:Come cambiare pagina da JavaScript

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

Ma non cambia l'URL in alto, in modo che quando un utente fa clic sul pulsante Indietro doesn' t tornare alla pagina precedente.

Come posso avere JavaScript modificare l'URL superiore e quindi il pulsante Indietro del browser funziona.

risposta

7

Hmm, vorrei utilizzare

Io non sono esattamente sicuro se è questo che vuoi dire.

28

semplice assegnazione di window.location o window.location.href dovrebbe andare bene:

window.location = newUrl; 

Tuttavia, il nuovo URL farà sì che il browser a caricare la nuova pagina, ma suona come si desidera modificare l'URL senza lasciare la pagina corrente. Sono disponibili due opzioni:

  1. Utilizzare l'URL hash. Ad esempio, è possibile passare da example.com a example.com#foo senza caricare una nuova pagina. È sufficiente impostare window.location.hash per semplificare la procedura. Quindi, dovresti ascoltare l'evento HTML5 hashchange, che verrà attivato quando l'utente preme il pulsante Indietro. Questo non è supportato nelle versioni precedenti di IE, ma controlla jQuery BBQ, che funziona in tutti i browser.

  2. È possibile utilizzare la cronologia HTML5 per modificare il percorso senza ricaricare la pagina. Ciò ti consentirà di passare da example.com/foo a example.com/bar. Usando questo è facile:

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

    Quando l'utente preme "Indietro", riceverai evento popstate della finestra, che si può facilmente ascoltare (jQuery):

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

    Sfortunatamente, questo è supportato solo in browser molto moderni, come Chrome, Safari e Firefox 4 beta.

+0

* il metodo .Rimontare sulle stringhe non cambierà la stringa è stato applicato a, genererà una nuova stringa. "* - il metodo' window.location.replace() 'non è lo stesso del metodo' String.prototype.replace() 'perché' window.location' non è una stringa (è un oggetto). 'window.location.replace()' sostituisce l'attuale URL con uno nuovo, mentre sovrascrivere la voce dell'URL precedente nella cronologia. –

+1

Grazie per la correzione, aggiornerò la mia risposta di conseguenza. – bcherry

+2

Guardando indietro, questa è di gran lunga la migliore risposta. document.location.href non ha nulla su pushState – buley

5

Se si desidera solo per aggiornare il percorso relativo si può anche fare

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

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

Problemi correlati