Страницы

Поиск по вопросам

суббота, 28 декабря 2019 г.

Как изменить адресную строку браузера без перезагрузки?

#jquery #javascript


Сайт у меня на аяксе и нужно чтобы при кликании по ссылке сработал аякс (то есть
страница не перезагружается, а подгружается), делаю так:
location.href=bla-bla;
return false;

но как я и думал - это не сработало. Какие есть решения? То есть нужно в адрессную
строку вставить урл той ссылки, на которую кликается пользователем.    


Ответы

Ответ 1



function setLocation(curLoc){ try { history.pushState(null, null, curLoc); return; } catch(e) {} location.hash = '#' + curLoc; }

Ответ 2



window.history.pushState("object or string", "Title", "/new-url"); Спецификация HTML5 также определяет другой, более сложный и более надежный способ управления историей посещений, основанный на использовании метода history.pushState() и события popstate. При переходе в новое состояние веб-приложение может вызвать метод history.pushState(), чтобы добавить это состояние в историю посещений. В первом аргументе методу передается объект, содержащий всю информацию, необходимую для восстановления текущего состояния приложения. Для этой цели подойдет любой объект, который можно преобразовать в строку вызовом метода JSON.stringify(), а также некоторые встроенные типы, такие как Date и RegExp. Во втором аргументе передается необязательное заглавие (простая текстовая строка), которую броузер сможет использовать для идентификации сохраненного состояния в истории посещений (например, в меню кнопки Back). В третьем необязательном аргументе передается строка URL, которая будет отображаться как адрес текущего состояния. Относительные URL-адреса интерпретируются относительно текущего адреса документа и нередко определяют лишь часть URL, соответствующую идентификатору фрагмента, такую как #state. Связывание различных состояний приложения с собственными URL-адресами дает пользователю возможность делать закладки на внутренние состояния приложения, и если в строке URL будет указан достаточное количество информации, приложение сможет восстановить это состояние при запуске с помощью закладки. © Дэвид Флэнаган. "JavaScript. Подробное руководство" Именно этим API пользуется, например, Вконтакте - адрес страниц меняется полностью без #. Стоит отметить, что window.history... писать не обязательно, достаточно просто history.... Также надо упомянуть, что данный API работает не во всех браузерах, например, как сказано в аналогичном вопросе на английском SO, в IE9 его нет.

Ответ 3



Работает даже в IE8: function setLocation(curLoc){ location.href = curLoc; location.hash = curLoc; } Только функцию я вызываю с хешем: setLocation('#book/' + id);

Комментариев нет:

Отправить комментарий