60

http://www.facebook.com/facebook?v=wallにアクセスし、[情報] タブをクリックします。コンテンツが読み込まれ、アドレス バーはhttp://www.facebook.com/facebook?v=infoになりますが、Web ページはリロードされませんでした。

最初はAjaxだと思いますが、私の質問は、リロードせずにアドレスバーを変更するにはどうすればよいですか? JS を使用してアンカー (#wall) を変更できることはわかっていますが、クエリ文字列 (?v=wall) はどのように変更できますか?

4

4 に答える 4

64

HTML5 の新history.pushState()機能を使用して、ページが最初に取得された URL とは別の URL にあるように見せかけることができます。

これは現時点では WebKit でのみサポートされている?v=wall#!/facebook?v=infoようです?v=info

この機能により、動的にロードされたページを適切にブックマークしたり、JS をサポートするユーザー エージェントと非 JS をサポートするユーザー エージェントの間で交換したりできます。あなたが JS ユーザーとして誰かにリンクした場合?v=wall#!/facebook?v=info、そのブラウザーが JS と XMLHttpRequest をサポートしていない場合、そのページはそのユーザーにとっては機能しません。また#!、検索エンジンが非 AJAX バージョンをダウンロードするためのヒントとしても使用されます。

于 2010-10-03T13:09:53.727 に答える
19

@Snoob-代わりに@bobinceの回答を受け入れていただければ幸いです。彼はここで最初に詳細について正しい軌道に乗っていました。受け入れられなくなるまでこれを削除/削除することはできないため、できるだけ正確になるように更新します。


現時点では、WebKit (Chrome、Safari など) 固有のものが表示されています (というか、表示されていません)。@ bobinceが他のブラウザーで指摘しているように、バーに実際のURL が表示されます。

http://www.facebook.com/facebook?v=wall#!/facebook?v=info\

Chrome が表示する場所:

http://www.facebook.com/facebook?v=info

これがAJAX コンテンツを Google 検索エンジンでクロール可能にする方法であることを考えると、これは少し理にかなっています。そのため、ブラウザーはコンテンツの出所も認識します。

詳細の修正: Webkit ブラウザーは、Facebook が必要とする短縮 URL を表示しています。ここでコードを確認できるHTML 5 履歴機能を使用しています( を参照してくださいHistoryManager)。この場合、具体的には.replaceState()、アクセスした URL を直接ご利用いただけます。

注:この回答は後で有効でなくなる可能性があります (WebKit 固有のビット)。他のブラウザーは HTML5 機能をますますサポートしているため、これはすぐに時代遅れになる可能性があります。

于 2010-10-03T12:59:57.180 に答える
0

MooTools の開発者には、cpojer のmootools-historyプラグインをチェックすることをお勧めします。このプラグインは、可能な場合はネイティブ履歴 API をサポートし、ハッシュへのフォールバックを提供します。

于 2010-10-21T22:54:50.690 に答える
-8

Facebookをやっていないので確認できません。しかし、私はそれがフルページリクエストでなければならないことを 95% 確信しています。ロケーションバーは書き込み不可です。 //yourtrustybank )。ブラウザがその部分だけをロードしているように見えるのは、おそらく速すぎますか?

しかし、誰かがこれについて私を訂正してくれるかどうか知りたいです.

于 2010-10-03T12:55:55.157 に答える