Убрать хеш из адресной строки
Проблема в том, что код выполняется перед тем, как происходит переход по хешу. В результате чего этот самый хеш добавляется в адресную строку. А нужно изменить адресную строку на нужный вид без добавления хеша. Причём страницу не перезагружать, иначе можно было бы просто правкой htaccess обойтись. Бьюсь со вчерашнего дня над этой задачей. Буду рад помощи.
<a href="#href" name="name" onclick="f()">alias</a> <a name="href">redirect</a> <script type="text/javascript"> function f() { var redirect = '/url/'; history.pushState('', '', redirect); } </script> |
|
Цитата:
|
ОК. Я думал можно что-то типа такого записать:
<a href="href"> RewriteRule ^.*(href)$ changeURL.php\#$1 [L] Но нет, действительно, так не работает. |
В таком случае не происходит перехода по хешу. А мне нужно, чтобы он произошел, а затем поменять url на необходимый.
|
avalan4e,
<a href="#href" name="name" onclick="f(event,this)">alias</a> <a name="href">redirect</a> <script type="text/javascript"> function f(event, link) { event.preventDefault(); link = link.getAttribute('href').replace(/#/g, ''); document.querySelector('[name="'+link+'"]').scrollIntoView(); var redirect = '/url/'; history.pushState('', '', redirect) } </script> |
рони, :)
onhashchange |
Poznakomlus,
не понял. |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <a href="#test">Test</a> <script> window.onhashchange = function () { console.log(location.hash); history.pushState('', '', '/url/'); alert(location.hash === ''); }; </script> </body> </html> |
Poznakomlus,
не понимаю чем это может помочь, запись хеша уже произошла, если конечно история не нужна, тогда только. |
показываю, что событие не на click стоит вешать, а на изменение хеша
|
Poznakomlus,
:-? ок если нужна только ссылка, если важно вернутся назад в нужное место, тогда код не рабочий или я чего-то не понимаю. |
Цитата:
есть специальное событие по работе с хешами если мы работаем с хешами то логичнее его использовать я же показал как определяется хеш и как при изменении истории он затирается |
Poznakomlus,
тогда может history.pushState заменить на history.replaceState в вашем коде? |
Цитата:
Цитата:
я только про обработчик событий говорю как навешивать, внутренняя реализация это уже к разработчику, что ему надо и как вести историю ведь здесь же нет проверки поддерживает ли броузер историю вообще, если докапываться |
Цитата:
|
Poznakomlus,
рони, Благодарю от всей души. Всё работает как часики. Вот так теперь выглядит мой код для обработки события перехода по хешу: <script type="text/javascript"> window.onhashchange = function () { console.log(location.hash); history.replaceState('', '', '/url'); }; </script> А как теперь сделать то же самое при переходе по якорю с другой страницы? window.onload делает это до перехода по хешу. В результате правильная строка при бесполезном переходе. |
Цитата:
|
Уважаемые форумчане, проблема не решается обращением к моим знаниям js и спекулятивному шаманству с бубном в этой области. Повторяю свой вопрос: как убрать хеш из адресной строки при переходе с другой страницы по ссылке типа:
<a href="url#hash">Проблема в том, что событие hashchange не происходит, а навешивание изменения ссылки при загрузке окна приводит к тому, что переход осуществляется уже по этой изменённой ссылке. Надеюсь на вашу отзывчивость, т. к. безрезультатно часами застреваю над этой задачей. |
avalan4e,
убрал ... может так попробовать пока знатоки не откликнулись. <script type="text/javascript"> window.onload = function () { location.hash && window.setTimeout(function() { history.replaceState('', '', '/url'); },300) }; </script> |
рони,
Отлично! Цель достигнута. У меня такая же идея была где-то на периферии сознания, но не успел добраться. Благодарю за помощь. |
Кто знает зачем ждать онлоад и еще 0.3 сек для редиректа?
|
warren buffet,
Насколько я понимаю, 0.3 секунды нужны для того, чтобы скрипт сработал после того, как произойдёт переход по хешу. Собственно сам onload слушается с целью попасть куда нужно при переходе по ссылке с учётом хеша с другой страницы. И поскольку событие обрабатывается и затирает адрес как только загружается страница, то нужного перехода не удаётся добиться без задержки. И вот этот момент мне самому интересно прояснить, а именно: как так получается, что на полностью загруженную страницу (после чего и срабатывает скрипт) не распространяется якорный переход? |
"Переход по хешу" это прокрутка страницы до элемента с id==hash если таковой имеется. А редирект сработает мгновенно. Закомпостировали моск друг другу.
|
Часовой пояс GMT +3, время: 02:42. |