2009-09-10 8 views
16

Gmailは、メールをクリックしてページを区別するときに使用します(+ Ajaxアクション)。 http://mail.google.com/mail/#inbox/1238e709e37a1394GmailはどのようにIEの仕事をリフレッシュせずに行うのですか?

私が見つかりました: http://X.com/MyPage.aspx#1 http://X.com/MyPage.aspx#2 http://X.com/MyPage.aspx#3

しかし、IE上にページの更新をし、それはdoesnの:あなたはこれらのURLの間にリフレッシュすることなく、前進とバックを使用することができFFやChromeで Google using # instead of search? in URL. Why?

をバックアクションが行われた後の#の後にパラメータを数えません。

どのようにGmailで魔法が起こるのですか?

+1

1: http://nix.lv/history/demo.html#3

は上でそれを発見しました! – jrharshath

答えて

13

私はあなたにこの問題に直面して解決したので、これに対する答えを与えることができます。

は、いくつかの概念が最初にここに理解することがあります。

  1. Javascriptを直接ブラウザの履歴を変更することはできません。
  2. ページ内のiframeのベースURLが変更されるたびに、履歴が更新されます。 (しかし、これにはブラウザによってはいくつかの違いがあります)。
  3. URLには「ハッシュ」部分があります。たとえば、URL http://mail.google.com/mail#inboxには、#inboxがハッシュされた部分です。それを「ハッシュ」と呼ぶことができます。だからhttp://mail.google.com/mailは私たちの "ベースURL"になります。

GMailによる履歴の追跡は、主にこの「ハッシュ」に基づくトリックを使用して行われます。だから、

、さらにいくつかの概念:アドレスバーの変更でURLが、履歴が更新さ

  1. (以前のURLは、歴史の中に入る)
  2. ベースURLが変更されます、ページがリロードされます。
  3. ベース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には履歴マネージャーもあります。

乾杯!

+0

+1興味深い情報ですが、私はそれがIEで前進/後進の特定の問題にどのように関連しているのか分かりません。 – Kamarey

+0

ありがとうございました。しかしIEの場合:1. [X.aspx] 2. [X.aspx#A] 3. [X.aspx#B]次にBackを押すと、1 [X.aspx]とページのリフレッシュに移動します2ではない。IEでBackを2 [X.aspx#A]にしてページの更新を行わないようにするにはどうすればよいですか? Gmailのように。 – SirMoreno

+0

大丈夫、それは私が完全に研究していない1つの領域です。しかし、あなたが使うことができるヒントがいくつかあります。答えに追加する... – jrharshath

関連する問題