私はあなたにこの問題に直面して解決したので、これに対する答えを与えることができます。
は、いくつかの概念が最初にここに理解することがあります。
- Javascriptを直接ブラウザの履歴を変更することはできません。
- ページ内のiframeのベースURLが変更されるたびに、履歴が更新されます。 (しかし、これにはブラウザによってはいくつかの違いがあります)。
- URLには「ハッシュ」部分があります。たとえば、URL
http://mail.google.com/mail#inbox
には、#inbox
がハッシュされた部分です。それを「ハッシュ」と呼ぶことができます。だからhttp://mail.google.com/mail
は私たちの "ベースURL"になります。
GMailによる履歴の追跡は、主にこの「ハッシュ」に基づくトリックを使用して行われます。だから、
、さらにいくつかの概念:アドレスバーの変更でURLが、履歴が更新さ
- (以前のURLは、歴史の中に入る)
- ベースURLが変更されます、ページがリロードされます。
- ベースURLを変更せずにURLのハッシュ部分が変更された場合、ページはリロードされません。
あなたはhttp://mail.google.com/mail#inbox
からhttp://mail.google.com/mail#sent
に行くときに、ページが更新を得ることはありません。
ハッシュが変更されたときにGmailがイベント通知を受け取ると、gmailはそれに基づいて処理を実行できます。残念ながら、履歴アクションを取得するのに役立つDOMイベントはありません。だから代わりに(これは私が問題をどのように克服したかを示す部分です)、私たちはハッシュへの変更をチェックする無限ループを実行します。変更があった場合は、ブラウザの「戻る」ボタンまたは「進む」ボタンへのクリックを検出します。
これを解決するにあたり、私は便利なツールを作った:URL parser。 URL内のGETパラメータ、およびハッシュでエンコードされたパラメータを解析できます。デモを行ってください!
乾杯!
IEでこの問題について:私は、この 'ハッシュ'ベースのソリューションがIE(貧しい古いLinux開発者)では動作しないことを認識していませんでした。
IEの場合、非表示のiframeを使用して、その「URLに影響を与える履歴」プロパティを使用して履歴を実装できます。私はこの声明が細部を欠いていることを知っていますが、それはIEでの自分の経験の欠如に由来しています。
私は、このソリューションを試してみてください、と私はアイフレーム/場所のハッシュを使用して、歴史の適切な実装を行うインターネット上のリンクのホストを見つけました:)
をフォローアップします。私は、さまざまなブラウザのiframeインターフェイスの違いを掘り下げるために忍耐を持っていませんでした。
私はjquery pluginを好むと思います。 YUIには履歴マネージャーもあります。
乾杯!
1: http://nix.lv/history/demo.html#3
は上でそれを発見しました! – jrharshath