Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Убрать хеш из адресной строки (https://javascript.ru/forum/events/63853-ubrat-khesh-iz-adresnojj-stroki.html)

avalan4e 04.07.2016 17:17

Убрать хеш из адресной строки
 
Проблема в том, что код выполняется перед тем, как происходит переход по хешу. В результате чего этот самый хеш добавляется в адресную строку. А нужно изменить адресную строку на нужный вид без добавления хеша. Причём страницу не перезагружать, иначе можно было бы просто правкой 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>

Viral 04.07.2016 18:15

Как-то так

laimas 04.07.2016 18:25

Цитата:

Сообщение от avalan4e
можно было бы просто правкой htaccess обойтись

Каким образом, если хеш на сервер не передается?

avalan4e 04.07.2016 19:02

ОК. Я думал можно что-то типа такого записать:
<a href="href">

RewriteRule ^.*(href)$ changeURL.php\#$1 [L]
Но нет, действительно, так не работает.

avalan4e 04.07.2016 19:14

В таком случае не происходит перехода по хешу. А мне нужно, чтобы он произошел, а затем поменять url на необходимый.

рони 04.07.2016 20:46

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>

Vlasenko Fedor 04.07.2016 22:06

рони, :)
onhashchange

рони 04.07.2016 22:29

Poznakomlus,
не понял.

Vlasenko Fedor 04.07.2016 22:49

<!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>

рони 04.07.2016 23:13

Poznakomlus,
не понимаю чем это может помочь, запись хеша уже произошла, если конечно история не нужна, тогда только.


Часовой пояс GMT +3, время: 23:13.