Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Смена адреса страницы (https://javascript.ru/forum/dom-window/44249-smena-adresa-stranicy.html)

Valentinka_1 12.01.2014 19:30

Смена адреса страницы
 
Доброго времени суток. Нужно сделать изменение url страницы без ее перезагрузи и не используя #hash. Пытаюсь разобрать пример найденные на просторах интернета
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Главная страница</title>
</head>
<body>
 
<a href="/one/" onclick="followLink(event, this)">первая страница</a> | 
<a href="/two/" onclick="followLink(event, this)">вторая страница</a> | 
<a href="/three/" onclick="followLink(event, this)">третья страница</a>
 
<script type="text/javascript">
 
function followLink(event, link)
{
    var nameLink = link.innerHTML;
    uploadContent(link.href);
    history.pushState({title:nameLink, href:link.href}, null, link.href);
    updateTitle(nameLink);
    event.preventDefault();
}
 
function updateTitle(title)
{
    var elm = document.getElementsByTagName('title')[0];
    elm.innerHTML = title;
}
 
function uploadContent(link)
{
    //тут реализуем загрузку части страницы с помощью AJAX
}
 
window.addEventListener("popstate", function(e) {
    uploadContent(e.state.href);                                     
    updateTitle(e.state.title);
}, false );
 
</script>
 
</body>
</html>

Но в консоле появляется ошибка Uncaught TypeError: Cannot read property 'href' of null. Судя по всему window.addEventListener не видит href, но я не могу понять в чем причина

danik.js 13.01.2014 03:46

В Firefox должно работать. А вот в хроме popstate возникает еще и при первоначальной загрузке страницы, причем в этот момент state равен null.
Хз если честно как лучше сделать. Как вариант - делать проверку на null и выходить.

Valentinka_1 13.01.2014 10:02

может есть какой-то другой способ изменить url в адресной строке без перезагрузки страницы?

danik.js 13.01.2014 11:54

Цитата:

Сообщение от Valentinka_1
может есть какой-то другой способ изменить url в адресной строке без перезагрузки страницы?

Глупо..

Valentinka_1 13.01.2014 16:21

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

danik.js 13.01.2014 17:32

Цитата:

Сообщение от Valentinka_1
может есть какой-то другой способ изменить url в адресной строке без перезагрузки страницы?

Ты думаешь есть 100500 способов сделать одно и то же? Web API проектируют стараясь свести избыточность к нулю, не в курсе?
И вобще, у тебя возникла маленькая проблемка (решение которой даже было предложено), и ты тут же забраковал "способ" и начал искать другой. Это нормально по-твоему?


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