Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Изменение loacation.hash пользователем. Как отследить?
 
 автор: Абырвалг   (10.04.2011 в 11:01)   письмо автору
 
 

Положим, на странице имеются якоря (в виде ссылок или в виде id).
И, положим, юзер на уже открытой странице ВРУЧНУЮ дописывает в адресной строке к URL страницы символ # и что-то после него (тот самый location.hash) и ЖМЕТ на Enter (или на кнопку "Перейти" браузера).

Если написанное юзером совпадает с имеющимся на странице якорем, то происходит ПЕРЕХОД - тег с якорем(id) помещается в левый верхний угол окна (при необходимости происходит скролл страницы).
Если написанного юзером hash'a на странице нет (не существует), то ПЕРЕХОДА не происходит.

Вопрос: возможно ли программно (но БЕЗ использования setTimeout и БЕЗ использования setInterval) отследить попытку юзера (как удачную, так и неудачную) такого (РУЧНОГО) перехода по якорю(id)?

  Ответить  
 
 автор: deimand   (10.04.2011 в 13:35)   письмо автору
 
   для: Абырвалг   (10.04.2011 в 11:01)
 

Если через event событие изменения location.hash нельзя отловить, то нет, только через setInterval.

  Ответить  
 
 автор: flaers   (10.04.2011 в 16:28)   письмо автору
 
   для: Абырвалг   (10.04.2011 в 11:01)
 

если пользователь нажимает 'enter' или 'перейти', следовательно он перезагружает страницу
ставим javascript обработчики и проверяем есть ли что-то

  Ответить  
 
 автор: Абырвалг   (10.04.2011 в 18:00)   письмо автору
 
   для: flaers   (10.04.2011 в 16:28)
 

Какие именно "javascript обработчики"?

  Ответить  
 
 автор: deimand   (11.04.2011 в 00:20)   письмо автору
 
   для: flaers   (10.04.2011 в 16:28)
 

А если пользователь копирует адрес в соседний бразер и там открывает?

  Ответить  
 
 автор: Абырвалг   (11.04.2011 в 00:49)   письмо автору
 
   для: deimand   (11.04.2011 в 00:20)
 

"если пользователь копирует адрес в соседний бразер и там открывает", то в "соседнем бразере" на странице срабатывает событие window.onload, кое легко отслеживается.

В том и фишка, что при первоначальной загрузке страницы (с hash или без оного) объект document.location.hash легко определяется по событию window.onload.
А вот когда пользователь вручную меняет этот самый hash, то window.onload не срабатывает, ибо документ в окне не перезагружается.

  Ответить  
 
 автор: deimand   (11.04.2011 в 01:04)   письмо автору
 
   для: Абырвалг   (11.04.2011 в 00:49)
 

Почему вас не устраивает пользоваться setinterval? Других надежных решений отслеживания изменения location.hash нет. И это не будет тормозить браузер.


 // default document.location.hash
 t = 'текущее состояние адресной строки';
 function wo()
 {
   h=document.location.hash;
   g=h.replace(/\#/g,'');
   f=g*1;
   if(t!=f)
   {
     t=f;
     // реакция на изменение location.hash
   }else return false;
 }setInterval(wo,666);

  Ответить  
 
 автор: SHAman   (11.04.2011 в 21:00)   письмо автору
 
   для: Абырвалг   (11.04.2011 в 00:49)
 

Эту штуку смотрят только по таймеру. Каждый промежуток времени сравниваем текущий #hash с предыдущим. Если изменился - делаем что-то. Если нет - перезапускаем таймер. Ну или перезапускаем таймер в любом случае - в зависимости от обстоятельств.

Такую штуку делал на своем сайте. Можете посмотреть.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования