1

2 フレームの HTML ページがあります。

  • FrameA には、さまざまなページへのリンクのリスト、またはページ内のアンカーが含まれています。
  • FrameB は個々のページを表示します。

一部のページには、トリガー テキスト付きの slideDown セクションが含まれています。つまり、このテキストをクリックすると、その下の slideDown セクションが表示/非表示になります。

トリガー要素の親要素にもアンカーが含まれています。次に例を示します。

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

ページを FrameB にロードするために使用される URL でアンカーが要求されるたびに検出したいと考えています。アンカー ref がある場合、アンカーが「展開可能な」要素内にあるかどうかを確認し、そうである場合は、下の要素で slideDown を実行して表示します。

$(document).ready(function(){ ... }); の中に Javascript を入れることで、これを簡単に行うことができます。読み込まれるページで。これにより、location.hash 値がチェックされ、見つかった場合は処理されます。ただし、これはページが FrameB にロードされる場合にのみ機能します。

ページが既にFrameB に読み込まれている場合、同じページ内の別のアンカーを指す FrameA のリンクをクリックすると、そのイベントをキャプチャできません。ページの位置が変更され、アンカーがページの上部またはその近くに表示されます。ページをリロードする必要はありません。

私の質問は次のとおり
です。FrameB に表示されたページで、FrameA でクリックされたリンクを介してそのページのアンカーが要求されたことを検出するために、どのイベント ハンドラーを使用できますか?

注: FrameA のコンテンツは自動生成されるため、FrameA のページに onClick イベントを使用することはできません。FrameB に表示されるページ内でのみ作業できます。

4

1 に答える 1

0

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);

オン - window.location.hash - 変更しますか? 非常によく似た質問です。

于 2009-12-28T03:42:06.297 に答える