Як я можу змінити поточну URL-адресу?


100

У мене є такий код, який змінює сторінки з JavaScript:

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

Але це не змінює верхню URL-адресу, тому коли хтось натискає кнопку "назад", вона не повертається до попередньої сторінки.

Як я можу в JavaScript змінити верхню URL-адресу, щоб кнопка повернення браузера працювала.

Відповіді:



38

Просте призначення window.locationабо window.location.hrefповинно бути добре:

window.location = newUrl;

Однак ваша нова URL-адреса призведе до того, що браузер завантажить нову сторінку, але це здається, що ви хочете змінити URL-адресу, не виходячи з поточної сторінки. Для цього у вас є два варіанти:

  1. Використовуйте хеш URL-адрес. Наприклад, ви можете перейти example.comдо місця, example.com#fooне завантажуючи нову сторінку. Ви можете просто налаштувати, window.location.hashщоб зробити це просто Потім слід прослухати hashchangeподію HTML5 , яка буде запущена, коли користувач натисне кнопку назад. Це не підтримується у старих версіях 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.


метод .replace в рядках не змінить рядок, до якого він застосовувався, він створить нову рядок. " - window.location.replace()метод не такий, як String.prototype.replace()метод, тому що window.locationце не рядок (це об'єкт). window.location.replace()Замінює поточний URL-адреса з новою, переписуючи старий запис URL-адреси в історії
Енді Е

1
Дякую за виправлення, я відповідно оновлю відповідь.
бчеррі

2
Озираючись назад, це, безумовно, найкраща відповідь. document.location.href нічого не має на pushState
buley

7

Хм, я б скористався

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

Я не точно впевнений, чи це ти маєш на увазі.


7

Якщо ви просто хочете оновити відносний шлях, ви також можете зробити

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

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.