Как изменить URL в браузере, не отходя от страницы? - PullRequest
15 голосов
/ 19 декабря 2011

Я сейчас пишу сложное AJAX-приложение, и весь сайт имеет чистые URL-адреса.В настоящее время PHP создает базовый макет для каждой страницы, однако мне не нужно уходить от каждой страницы, когда пользователь нажимает на ссылку, и я не хочу иметь хэш в URL-адресе, потому что он выиграл ».не вписывается в остальную часть сайта.Я знаю, что это вызвало много нагрузок на сайте, и это, кажется, довольно часто спрашивают, но мне было интересно, есть ли аккуратный способ HTML5 просто появиться, чтобы изменить URL-адрес в адресной строке, даже если он технически остается неизменнымстр.

Ответы [ 2 ]

42 голосов
/ 19 декабря 2011

Вы можете сделать это с history.pushState, но только в браузерах, которые его поддерживают.Просто попробуйте следующую строку в браузере JavaScript-Console.

history.pushState({},"URL Rewrite Example","https://stackoverflow.com/example")

Подробнее об этом в Метод pushState () (Mozilla Developer)

Аналогичный вопрос Как мне с помощью JavaScript изменить URL в браузере без загрузки новой страницы?

5 голосов
/ 19 декабря 2011

Как уже говорили, HTML5's history.pushstate - это путь.Попробуйте просмотреть репозиторий на github, чтобы увидеть его в действии (https://github.com/visionmedia/express).

Проблема - это единственная версия IE, которая поддерживает history.pushstate, это IE10, который вроде отстой.

Много сайтов используютhashbang #! URL-адреса, такие как Twitter (например, https://twitter.com/#!/Sironfoot). hashbang - это шаблон URL-адреса, согласованный поисковыми системами, чтобы они могли по-прежнему тралить и индексировать веб-сайт, работающий на Ajax (дополнительная информация здесь http://code.google.com/web/ajaxcrawling/docs/specification.html), чтобы вы могли пойти по этому пути.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...