Сохранение позиции скрола страницы при нажатии back и refresh

Drakon

Новичок
Сохранение позиции скрола страницы при нажатии back и refresh

Собрал по частям код, который тупо сохраняет позицию каждого URL'а а потом при загрузке восстанавливает.
Нужно сделать чтоб восстанавливалось тока при нажатии refresh или back.

Вот код:

Код:
function getScrollXY() 
{
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [ scrOfX, scrOfY ];
}

function getCookie( name ) 
{
	var start = document.cookie.indexOf( name + "=" );
	var len = start + name.length + 1;
	if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
		return null;
	}
	if ( start == -1 ) return null;
	var end = document.cookie.indexOf( ';', len );
	if ( end == -1 ) end = document.cookie.length;
	return unescape( document.cookie.substring( len, end ) );
}

function setCookie( name, value, expires, path, domain, secure ) 
{
	var today = new Date();
	today.setTime( today.getTime() );
	if ( expires ) {
		expires = expires * 1000 * 60 * 60 * 24;
	}
	var expires_date = new Date( today.getTime() + (expires) );
	document.cookie = name+'='+escape( value ) +
		( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
		( ( path ) ? ';path=' + path : '' ) +
		( ( domain ) ? ';domain=' + domain : '' ) +
		( ( secure ) ? ';secure' : '' );
}

function deleteCookie( name, path, domain ) 
{
	if ( getCookie( name ) ) document.cookie = name + '=' +
			( ( path ) ? ';path=' + path : '') +
			( ( domain ) ? ';domain=' + domain : '' ) +
			';expires=Thu, 01-Jan-1970 00:00:01 GMT';
}

function update_scroll_data ()
{
	var curScroll = getScrollXY();
	setCookie( 'scroll_pos', curScroll[0] + ',' + curScroll[1], 
		7200, document.location.pathname, document.location.host);
}

function set_scroll_position ()
{
	var scroll_pos = getCookie ('scroll_pos');
	if (scroll_pos)
	{
		scroll_pos = scroll_pos.split (',');
    		window.scrollTo(scroll_pos[0], scroll_pos[1]);
	}
}

window.onscroll   = update_scroll_data;
window.onclick    = update_scroll_data;
window.onkeypress = update_scroll_data;
window.onload     = set_scroll_position;
В принципе вижу тока 1 вариант: ловить клики на ссылки и удалять кукисы для этих ссылок перед загрузкой страницы.
Например, на сайте gazeta.ru это каким-то образом реализовано.
 

Adelf

Administrator
Команда форума
anchor - бред

Тема интересная. Я так и не смог понять где у gazeta.ru соответствующие скрипты.
По твоим скриптам - возможно стоит помучать обьект типа history. И по нему понять в первый раз мы данную страницу открываем для данного окна или уже второй раз(тогда в куках искать уже).
Была у меня еще мысль об обьектах типа Window, которые как раз логически обозначают окно браузера и просто записывать инфу об скроллах туда, теоретически могло быть так, что инфа от страницы к странице оставалась бы, но это, кажется, не так.
 

vovanium

Новичок
Drakon
А разве броузеры сами не запоминают позицию когда делаешь back или refresh?

-~{}~ 03.06.09 15:57:

Adelf
Я так и не смог понять где у gazeta.ru соответствующие скрипты
А их там и нет, позицию запоминает сам броузер.
 
Сверху