![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
Cheba |
|
|||
![]() pointless one ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1777 Регистрация: 27.11.2003 Где: /dev/null Репутация: 1 Всего: 62 |
Как можно отследить переход по анкерам (ссылкам внутри документа)?
Я имею в виду переходы с http://example.com/doc.html#anchor1 на http://example.com/doc.html#anchor2 Отлов кликов по ссылкам не предлагать. Это "самое простое решение" имеет громадную кучу недостатков. Надо отлавливать не только переходы по ссылкам, но и по back/next, и по ручному воду адреса, и по переходу из истории или закладки. В общем, все возможные виды таких переходов. Вся проблема состоит в том, что такие переходы не порождают событий типа load или unload... |
|||
|
||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
В заголовке документа пропиши:
if(location.hash != '') .... location.hash содержит якорь. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
Cheba |
|
|||
![]() pointless one ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1777 Регистрация: 27.11.2003 Где: /dev/null Репутация: 1 Всего: 62 |
Где лежит якорь я знаю. Но мне надо обрабатывать переходы между якорями. Я не хочу постоянно опрашивать содержимое якоря - это очень напрягает. Я хочу получать уведомление в момент смены якоря.
|
|||
|
||||
Ciber SLasH |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: 24 Всего: 67 |
|
|||
|
||||
Cheba |
|
|||
![]() pointless one ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1777 Регистрация: 27.11.2003 Где: /dev/null Репутация: 1 Всего: 62 |
Ну, и? Вот ежели я руками сбацаю в адресной строке анкер оно мне покажет его? Не покажет. А ежели я из букмарков перейду? тоже не покажет. А если по кнопке Back? Тоже не покажет. А меня интересуют как-раз эти случаи.
|
|||
|
||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Скажи мне как это тебя напрягает? Что бы узнать смену состояния нужно это состояние проверять, можно самому, можно железом (прерывания), но мы отклонились. Что есть обрабатывать переходы между якорями? Разьясняю что подсказал я: загружаеться страница, ты читаешь якорь, если он изменился (следовательно хранишь ты его либо в куках, либо на сервере), то выполняешь что хочешь. Дай больше инфы что ты делаешь, бдует менее пугающее решение. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
Ciber SLasH |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: 24 Всего: 67 |
Можно ещё на window.onscroll повесить проверку location.hash
|
|||
|
||||
Cheba |
|
||||
![]() pointless one ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1777 Регистрация: 27.11.2003 Где: /dev/null Репутация: 1 Всего: 62 |
Делаю AJAX сайт. Хоче чтобы у него была нормальная (привычная) обработка кнопок Вперед/Назад. Хочу чтобы нормально можно было букмарки создавать. Хочу чтобы история сохранялась. Для этого надо как-то модифицировать УРЛ, бо именно по нему идентифицируются "места, где побывал". Чтобы не перезагружалась страница можно менятьтолько хешевую часть УРЛа.
Далее. Подставлять хеши умею. Они сохраняются в истории и кнопки вперед-назад и букмарки начинают работать как надо. По онлоаду из хеша достаю состояние приложения и все прекрасно. Возникает следующая проблема когда УРЛы отличаются только хешами не происходит событие load (вернее в ИЕ оно происходит, а в Лисе - нет). Вот мне и надо отлавливать момент перехода между такими УРЛами, где только хеши рознятся. В ИЕ можно вешать листенеры на хитрое событие onpropertychange.
Однако, у меня это свойстко почему-то никогда не меняется. Может, я не туда вешаю? Но зато в ИЕ load происходит (хотя и не понятно почему) - тут, вроде проблем нет. Для Лисы думал сделать следующее. Подменить геттер и сеттер для document.location.hash. Но там вылезает ошибка - redeclaration of getter hash. Кому интересно, вот кусочек (нерабочего) кода для подмены геттеров и сеттеров.
Собственно, далее __defineGetter__ дело не идет из-за ошибки. Вот такие вот идеи для реализации того, что в обчных условиях давно уже работает. |
||||
|
|||||
12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Кстати, я попробовал половить переходы в IE между анкерами по onload - тоже не ловит. Ходил по локальным файлам, а не через веб-сервер, может в этом дело, отчего onload не срабатывало?
А знание переходов нужно же не сразу по переходу, а в какой-то процедуре? Поэтому анализ history и history.length в нужном месте мог бы дать кое-что. -------------------- Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go |
|||
|
||||
Onis |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 241 Регистрация: 18.6.2005 Где: Украина, Николаев Репутация: 2 Всего: 3 |
Cheba,
У меня такая же проблема. Вы нашли способ её решения? |
|||
|
||||
Onis |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 241 Регистрация: 18.6.2005 Где: Украина, Николаев Репутация: 2 Всего: 3 |
Если кто-то знает решение проблемы без использования jquery и другой ереси, буду очень благодарен.
Это сообщение отредактировал(а) Onis - 3.6.2009, 17:28 |
|||
|
||||
Nechto |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 31.5.2009 Репутация: нет Всего: нет |
У меня тоже такая же проблема. И она каким то способом решатся через iframe. Я в этом направлении напрягаюсь! кому интересно давайте вместе дробить эту тему!
в файле исходиники gmail они решили эту проблему! Присоединённый файл ( Кол-во скачиваний: 5 ) ![]() |
|||
|
||||
Се ля ви |
|
|||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 5 Всего: 127 |
Народ, а может, в версии IE проблемко?.. -------------------- |
|||
|
||||
Dubrov |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 6.7.2006 Где: Горы Репутация: нет Всего: нет |
Да, проблема действиетельно актуальная, я выкрутился установкой обработчика onclick всем ссылкам:
А в функции processLocation(); обработка урла ЗЫ, можно конечно и без ЖКвери обойтись, если кому он не симпатизирует. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
Dubrov, а кнопки "назад-вперед" броузера тоже ловишь?
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
![]() ![]() ![]() |
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |