2010-10-02 4 views
66

У меня есть следующий код, который изменяет страницы внутри JavaScript:Как изменить страницу внутри JavaScript

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

Но это не меняет верхний URL, поэтому, когда кто-то нажимает на кнопку назад он Безразлично» t вернуться к предыдущей странице.

Как я могу изменить JavaScript и верхний URL-адрес, так что кнопка возврата браузера работает.

ответ

7

Хм, я бы использовал

Я не совсем уверен, что это то, что вы имеете в виду.

28

Простой сопоставляющий window.location или window.location.href должно быть прекрасно:

window.location = newUrl; 

Однако ваш новый URL заставит браузер, чтобы загрузить новую страницу, но это звучит, как вы хотели бы, чтобы изменить URL, не выходя текущую страницу. У вас есть два варианта:

  1. Используйте хэш URL. Например, вы можете перейти от example.com в example.com#foo без загрузки новой страницы. Вы можете просто установить window.location.hash, чтобы сделать это легко. Затем вы должны прослушать событие HTML5 hashchange, которое будет запущено, когда пользователь нажмет кнопку «Назад». Это не поддерживается в более старых версиях IE, но проверьте jQuery BBQ, что делает эту работу во всех браузерах.

  2. Вы можете использовать историю HTML5 для изменения пути без перезагрузки страницы. Это позволит вам изменить с example.com/foo на example.com/bar. Используя это легко:

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

    Когда пользователь нажимает "назад", вы получите popstate событие этого окна, которое вы можете легко слушать (Jquery):

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

    К сожалению, это поддерживается только в современных браузерах, таких как Chrome, Safari и бета-версия Firefox 4.

+0

* метод .Надеть на струнах не изменит строку она была применена к, он будет генерировать новую строку. "* - метод' window.location.replace() 'не совпадает с методом' String.prototype.replace() ', потому что' window.location' не является строкой (это объект). 'window.location.replace()' заменяет текущий URL новым, в то время как перезаписывая запись старого URL-адреса в истории. –

+1

Спасибо за исправление, я соответственно обновлю ответ. – bcherry

+2

Оглядываясь назад, это, безусловно, лучший ответ. document.location.href ничего не имеет на pushState – buley

5

Если вы просто хотите обновить относительный путь, который вы также можете сделать

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

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

Смежные вопросы