Как изменить отображаемый в браузере URL, не покидая страницу - PullRequest
10 голосов
/ 03 ноября 2010

Возможно ли с помощью JavaScript изменить URL браузера, но не покинуть страницу?

Ответы [ 4 ]

16 голосов
/ 03 ноября 2010

В старых браузерах вы можете , а не изменить URL-адрес в адресной строке, не покидая страницы. Но вы можете изменить хэш-часть URL, не покидая страницу. То есть вы можете изменить www.example.com на www.example.com#new_text с помощью JavaScript window.location.hash = "new_text"; все после # можно изменить.

Однако в HTML5 появился новый API истории, который позволяет изменять часть URL-адреса после домена. Таким образом, вы все равно не можете изменить www.example.com на www.BankOfAmerica.com (по соображениям безопасности), но вы можете изменить www.example.com/foo на www.example.com/bar.

history.pushState("object or string representing the state of the page", "new title", "newURL");

Проверьте Когда можно использовать ... , чтобы увидеть, какие браузеры поддерживают управление историей сеансов HTML5 и поддерживают новый метод pushState.

Кроме того, есть библиотека JavaScript, которая нормализует API истории в разных браузерах, изменяет URL-адрес в новых браузерах и использует часть хэша для старых браузеров. См. history.js .

4 голосов
/ 03 ноября 2010

Я предполагаю, что вы говорите о видимом URL-адресе в строке URL.

Ответ - Нет, это серьезная уязвимость безопасности, когда приложение пытается обмануть пользователей, заставляя их думать, что они находятся на другомсайт.

0 голосов
/ 03 ноября 2010

Нет, это невозможно.И всякий раз, когда это возможно, это ошибка браузера (я знаю о предыдущих ошибках безопасности, связанных с этим поведением, и они были исправлены в прошлом).

На самом деле ... Вы можете изменить последнюю частьURL, что-нибудь после символа #.Но имя хоста и путь не могут быть изменены, не покидая страницу.

0 голосов
/ 03 ноября 2010

Вы можете изменить что-либо после хеш-метки (#), поскольку это часто используется в приложениях Ajax, таких как поиск Google и новый Twitter. (Вот почему все отображается после хеш-метки в этих приложениях.) Но если вы измените что-либо еще, страницу придется перезагрузить.

...