Кнопка Назад - пропустить якоря - PullRequest
2 голосов
/ 06 мая 2011

У меня есть типичная настройка динамического содержимого в стиле ajax: щелкните ссылку, измените привязку в адресной строке и загрузите новый контент. Когда пользователь нажимает кнопку «Назад», он проходит по всем якорям - как и ожидалось.

Есть ли способ (использующий, я полагаю, JavaScript), чтобы кнопка «Назад» вернулась на предыдущую страницу и «проигнорировала» все привязки?

Ответы [ 2 ]

5 голосов
/ 06 мая 2011

Cout этапов, которые пользователь проходит и использовать

history.back(X);

или

  history.go(-1*X);

для возврата к X страницам / якорям.

1 голос
/ 06 мая 2011

Во-первых, чтобы убедиться, что я понимаю, вы назвали свои закладки AJAX такими же, как идентификаторы в ваших элементах DOM?Если так, в любом случае, чтобы отменить это?Вы можете обмануть, чтобы не упасть, но это хитрый способ сделать это.Вместо этого у вас должен быть идентификатор типа #somepage и URL-адреса AJAX типа #!/somepage, чтобы они не запутались.Кроме того, такие люди, как Google, не будут знать, что обычные #id s являются хэш-URLами, но выполнение #!/ дает Google ключ к разгадке.

Теперь, если вы хотите сделать это с помощью метода #!/, вам нужентаймер для старых браузеров (<= IE7) Но для «современных» браузеров IE8, FF и Chrome вы можете использовать свойство onhashchange JS, например: </p>

window.onhashchange = function(){ console.log('hash has changed') };

Затем, если вы хотите поддерживать старые браузеры, вам нужносделать что-то более продвинутое.Вам нужно сделать:

var currentPage = '';
setTimeout(function(){
  if(currentPage !== window.location.hash){
    console.log('hash has changed');
    currentPage = window.location.hash
  }
},500);

В обоих примерах вам нужно заменить console.log() s собственной функцией, которая вызывает событие «change page».

Чтобы остановитьпрокрутка, которую вы можете добавить:

window.onhashchange = function(){
  if (window.location.hash == "" || window.location.hash == "#"){ return false; }
  //rest of your code here!
};

Возврат false будет препятствовать прокрутке.Это должно работать и в таймере.

Дополнительная информация:
https://developer.mozilla.org/en/DOM/window.onhashchange
http://msdn.microsoft.com/en-us/library/cc288209(VS.85).aspx
http://ajaxpatterns.org/Unique_URLs

...