Кнопка возврата не работает в Chrome

#javascript #jquery #html #google-chrome #jscrollpane

#javascript #jquery #HTML #google-chrome #jscrollpane

Вопрос:

Мы используем jscrollpane для навигации по некоторым разделам при нажатии на привязку хэша ( # ). При нажатии кнопки «Назад» в Chrome URL-адрес меняется в адресной строке, но браузер не переходит обратно к div. В Firefox он возвращается к предыдущему div.

http://www.sandbox.brightboxstudios.com/swings/test4.html

Я перепробовал всевозможные вещи, включая плагины, различные версии библиотеки jquery.

Кроме того, все, что я пытался сделать, чтобы активные пункты меню меняли класс на active при привязке URL-адреса, не сработало, скорее всего, из-за моего незнания javascript. Это тоже было бы здорово исправить!

Комментарии:

1. Описание реальной проблемы было бы неплохо.

2. Все равно было бы неплохо описать это здесь с техническими деталями использования, вместо описания владения Рубеном Javascript.

3. @deceze: Я добавил это к вопросу, не стесняйтесь добавлять любые другие детали, которые вы считаете подходящими.

4. при использовании последней версии Chrome (12) на компьютере Mac кнопка «Назад» работает нормально. однако скользящей анимации нет, это то, что вас беспокоит?

5. о, я понимаю, это вернется на первую страницу, но не на 2,3 и т.д..

Ответ №1:

Я попробовал исправить этот код поверх вашего кода:

 $('ul.nav a')
.unbind("click") // to remove your binding in my console
.bind('click',function(event){ // rebind event handler
    var $anchor = $(this);
    $('html, body').stop().animate({
      scrollLeft: $($anchor.attr('href')).offset().left
    }, 1500,'easeInOutExpo');
  event.preventDefault();

  // this is a trick:
  location.href = $anchor.attr('href');
  return false;
});
  

и навигация начала работать. Попробуйте сами.

Комментарии:

1. Итак, я просто заменяю свой код этим или помещаю это после? Я пробовал оба .. кажется, что перед скольжением теперь работает, и все еще не работает при нажатии кнопки «Назад» .. БОЛЬШОЕ СПАСИБО ЗА ВАШУ ПОМОЩЬ!

2. Это не имеет значения — замените или поместите после 😉 Лучше все-таки разместить свой JS в HTML. P.S.: У меня Chrome 11.0

3. хорошо, я это сделал и оставил это для вашего ознакомления.. У меня также есть 11, и теперь он не скользит, и кнопка возврата не работает..

4. хорошо, приведенный ниже комментарий заставил меня понять, что переход туда-обратно действительно работает, за вычетом возврата на исходную страницу без хэша, однако я мог бы просто перенаправить URL, чтобы добавить хэш, я все равно планировал, чтобы он начинался с середины.. Единственная проблема в том, что сейчас она не скользит..

5. большую часть времени это работает, но иногда дает сбои при нажатии кнопки возврата и показывает предыдущую страницу, но только на мгновение, а затем сразу обратно .. есть идеи? действительно близко! большое спасибо!!

Ответ №2:

Я вижу одну проблему, которая почти наверняка влияет на ситуацию.

Где-то в вашем javascript привязка хэша дополняется косой чертой, в результате чего результирующий URL выглядит следующим образом:

http://www.sandbox.brightboxstudios.com/swings/test4.html#/section3

Обратите внимание на косую черту после # хэша, что делает его технически недопустимым URL (в нем нет идентификатора или имени со значением #/section3 ). Это не отображается в строке состояния при наведении курсора мыши на ссылку, только в результирующем URL, что наводит меня на мысль, что это связано с используемым вами плагином address (хотя у меня нет личного опыта работы с ним).

Кнопка возврата только работает у меня в Firefox, когда предыдущий URL-адрес не содержит хэша (т. Е. действительный URL). Мне было трудно отлаживать вашу страницу со всеми загруженными плагинами, но посмотрите, можете ли вы что-нибудь сделать, чтобы сделать эти URL-адреса действительными и избавиться от косой черты.

Кроме того, даже если это всего лишь демо, вы должны убедиться, что вы не дублируете id s. У вас есть #header и #middle , появляющиеся несколько раз. Лучше всего просто устранить все сомнения во время отладки (или всегда, на самом деле) и использовать правильную разметку.

Надеюсь, это немного приблизит вас к решению вашей проблемы.

Комментарии:

1. Похоже, вы многое исправили, сделав это, теперь я могу возвращаться назад и вперед в Chrome, за одним исключением: вернуться к исходному URL без хэша. Итак, это многое исправило. Вы можете попробовать запустить событие изменения хэша onclick для этих ссылок, независимо от того, действительно ли изменился хэш. (Только что заметил, что эффект слайда больше не работает, хотя …)

2. Я планировал просто добавить перенаправление с основного домена, чтобы добавить хэштег или даже начать его с середины.. Мне просто нужно сдвинуть назад..