Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Работа с историей в браузире. (https://javascript.ru/forum/misc/36471-rabota-s-istoriejj-v-brauzire.html)

ozzon91 16.03.2013 04:06

Работа с историей в браузире.
 
Доброе время суток всем.

Есть такой код:
Демо - http://alpaca.org.ua/graph/address/
<!DOCTYPE HTML>
<html>
<head>
	<meta charset="utf-8">
    <title>Push</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>

<style>
#wrapper {
	position: relative;
	margin: 0 auto;
	border: 1px #c2c2c2 solid;
	width: 920px;
	height: 520px;
	overflow: hidden;
}

#slider {
	background: #EDEDED;
	width: 900px;
	height: 520px;
	position: absolute;
	padding: 10px;
}

.go {
	background-color: violet;
	border-radius: 50%;
	display: block;
	width: 50px;
	height: 50px;
	position: absolute;
	top: -23px;
	overflow: hidden;
	text-indent: -999px;
}

#test1 {
}

#test2 {
	left: 70px;
}

#test3 {
	left: 140px;
}

#nav {
	background-color: blue;
	position: relative;
	margin: 30px auto;
	width: 180px;
	height: 3px;
}
</style>

<script>

$(document).ready(function(){

$('.go').bind('click', function() {

	var ur = $(this).attr('href');

	$.ajax({ 
  		url: ur,
  		success: function(data) {
  					$('#slider').text(data);
  					history.pushState(null, null, ur);
  					slid();
  				}
  		});

	$('.go').each(function() {
		$(this).css('background', 'violet');
	});

	$(this).css('background', 'blue');

});


function slid() {
	$('#slider').css({right: '-900px'});
	$('#slider').animate({right: "0"}, 300);
}

});

</script>

</head>

<body>
<div id='nav'>
	<a href="test.php" class='go' id='test1' onclick='return false;'>test1</a>
	<a href="test2.php" class='go' id='test2' onclick='return false;'>test2</a>
	<a href="test3.php" class='go' id='test3' onclick='return false;'>test3</a>
</div>
<div id='wrapper'>
	<div id='slider'>Главная страница</div>
</div>

</body>
</html>


Нужно что бы при смене адреса в строке и обновлении страницы не перекидывала на test3.php и пр. Знаю, что нужно как-то ловить событие popstate, но не могу разобраться до конца, помогите.

danik.js 16.03.2013 04:15

Во-первых, при прямом запросе файла - должен отдаваться контент вместе с шаблоном. Это на случай F5 или перехода по прямой ссылке. Тут поможет анализ заголовка X-Requested-With, который в случае xhr будет равен "XMLHttpRequest"
Во-вторых нужно слушать событие window@popstate возникающее при навигации по истории

ozzon91 16.03.2013 04:26

То есть нужно на сервере анализировать заголовок X-Requested-With?
Часто вижу такой код
window.onload=function(){ 
window.setTimeout( 
function()  
{ 
window.addEventListener( 
"popstate",  
function(e) { 
//ajax загрузка нужной части сайта. 
e.preventDefault(); 
},  
false 
); 
}, 
 1); 
}

Не могу понять, что он делает?

ozzon91 16.03.2013 21:28

Как задействовать кнопки вперед назад?

devote 16.03.2013 21:46

Цитата:

Сообщение от ozzon91
Как задействовать кнопки вперед назад?

Цитата:

Сообщение от danik.js
слушать событие window@popstate возникающее при навигации по истории

:)


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