Как я могу проанализировать URL-адрес, вызываемый между страницами в наборе фреймов?

У меня есть HTML-страница с двумя кадрами:

  • FrameA содержит список ссылок на различные страницы или привязки внутри страниц.
  • FrameB отображает отдельные страницы.

Некоторые страницы содержат разделы slideDown с триггерным текстом, т. е. щелчок по этому тексту показывает/скрывает раздел slideDown под ним.

Родительский элемент элемента триггера также содержит привязку, например:

<li class="expandable">
  <p><a name="myanchor3"></a>Trigger text</p>
  <div class="slideDownSection">
       ...
  </div>
</li>

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

Я могу сделать это достаточно легко, поместив некоторый Javascript внутри $(document).ready(function(){ ... }); на странице, которая загружается. Это проверяет значение location.hash и обрабатывает его, если оно найдено. Однако это работает только тогда, когда страница загружается в FrameB.

Если страница уже загружена во FrameB, и я нажимаю ссылку во FrameA, которая указывает на другую привязку на той же странице, я не могу зафиксировать это событие. Положение страницы изменяется, чтобы якорь отображался в верхней части страницы или рядом с ней — без перезагрузки страницы.

Мой вопрос:
Какой обработчик событий я могу использовать на странице, отображаемой в FrameB, чтобы определить, что якорь на этой странице был запрошен по ссылке, нажатой в FrameA?

Примечание. Содержимое FrameA создается автоматически, поэтому я не могу использовать событие onClick для страницы в FrameA, я могу работать только со страницами, отображаемыми в FrameB.


person Community    schedule 28.12.2009    source источник
comment
Кадры 2010 года?! Ты должно быть шутишь!   -  person Moshe    schedule 28.12.2009
comment
Из чего сгенерирован frameA?   -  person Moshe    schedule 28.12.2009
comment
Кадры 2010 года?! Ты должно быть шутишь! - Ага, я знаю! Добро пожаловать в 21 век! Это выходные данные WebHelp, созданные с помощью инструмента разработки документации Madcap Flare. FrameA — это индексный фрейм, я не могу контролировать то, что происходит в этом фрейме.   -  person    schedule 30.12.2009


Ответы (1)


IE8 поддерживает событие hashchange, которое вы можете прослушивать. Для всех других браузеров вы должны опросить значение location.hash с помощью setInterval():

var lastHash = null;
function checkHash() {
  if (window.location.hash != lastHash) {
    lastHash = window.location.hash;

    // Do your hash stuff
  }
}

setInterval(checkHash, 100);

On - window.location.hash - Change? - очень похожий вопрос.

person Annabelle    schedule 28.12.2009
comment
Спасибо. Функциональность, которую я добавляю, приятна, а не обязательна, поэтому я собираюсь использовать событие hashchange, как вы предлагаете, и пользователи с IE8 (или FF3.6, когда он выйдет) получат это, но люди в других браузерах просто не получат автоматические слайды - я могу с этим смириться. Спасибо. - person ; 30.12.2009