0

URL ハッシュを使用してページをスクロールしています。私がやっていることは、2つのページがあるとしましょう:

Page1Page2

最初に、URLが次のようになるよりもURLハッシュに移動しpage1て設定します:page2

 http://localhost:48785/page2#id

このコードを使用してハッシュを設定しています:

window.location.hash = "id";

私はブラウザの戻るボタンを押して前のページに行きましたpage1。この時点まで、すべてが正常に機能します。

ページ2でハッシュを2回設定すると問題が発生します。お気に入り:

 http://localhost:48785/page2#id

 http://localhost:48785/page2#id2

ブラウザの戻るボタンを押すと、ハッシュ #id と #id2 の間を行き来するだけです。

page2 でハッシュを 2 回設定した後、戻るボタンで前のページ、つまり page1 に移動しないのはなぜですか?

4

4 に答える 4

0

ここにリンクの説明を入力してくださいHistory API を実行し、ブラウザから履歴を削除してループから抜け出すことができます

于 2013-04-27T05:54:15.823 に答える
0

HTML5 : 6.6.9 : Navigating to a fragment identifierは次のように述べているためです。

ユーザー エージェントがフラグメント識別子に移動することになっている場合、ユーザー エージェントは次の手順を実行する必要があります。

  1. ブラウジング コンテキストのセッション履歴で、現在のエントリより後のすべてのエントリを削除します。現在のエントリがセッション履歴の最後のエントリである場合、エントリは削除されません。これは必ずしもユーザー エージェントのユーザー インターフェイスに影響を与える必要はありません。

  2. トップレベルのブラウジング コンテキストのドキュメント ファミリ内の Document オブジェクトに関連付けられている、履歴トラバーサル タスク ソースによってキューに入れられたタスクをすべて削除します。

  3. 新しいリソースとその Document オブジェクト、および関連する状態を表す History オブジェクトの末尾に新しいエントリを追加します。その URL は、ユーザー エージェントが移動していたアドレスに設定する必要があります。タイトルは未設定のままにする必要があります。

  4. 非同期イベント フラグを設定して、履歴を新しいエントリまでトラバースします。これにより、現在のドキュメントのアドレスで指定されたフラグメント識別子までスクロールします。

これは、ドキュメント間のリンクと同じ方法でドキュメント内のリンクを取り消すことができるようにするためです。戻るボタンを押しても一部のリンク ナビゲーションの取り消しとしてのみ機能し、他のリンク ナビゲーションでは機能しない場合、特にスクロールによって表示されるコンテンツが完全に変更される可能性がある場合、ユーザーの混乱が生じる可能性があります。

于 2013-04-27T05:56:36.007 に答える
0

ここで説明されているように履歴 API を使用できるようですhttp://www.thecssninja.com/javascript/stealing-history-api

于 2013-04-27T05:14:46.970 に答える