リンクをクリックすると、場所全体を更新したりURLアドレスバーを変更したりせずにAページにリダイレクトされるインターネット上のアプリを見つけました。
これで私を助けてください。
履歴APIを使用すると、次のようなことができます
if (history && history.pushState){
history.pushState(null, null, '/new/url');
}
Chrome js コンソールを使用してブラウザで試してみてください
必要なのはそれだけです(もう少し多いかもしれませんが、それが基本です)
HTML5 History API を使用して、ページを更新せずに URL を変更することができ
ます。クロスブラウザー ソリューション用のHistory.js
jQuery PJAX プラグインhttps://github.com/defunkt/jquery-pjaxは、あなたが言及したことを行うのに役立ちます。コンテンツを更新し、更新せずに URL を変更するのに役立ちます。
以下に例を示します: http://pjax.heroku.com/
この例のソース コードは、https ://github.com/defunkt/jquery-pjax/tree/heroku から入手できます。
これは通常、最新のHTML5
履歴 API を使用するか、古いブラウザーの場合は URL のハッシュを変更することによって行われます。この記事をご覧ください: http://dev.opera.com/articles/view/introducing-the-html5-history-api/。
ユーザー アクションによって新しいページが表示される場合、新しいページを (新しい URL で) 読み込む代わりに、ページは共通のプロパティ (たとえば、ヘッダー、フッター、または e コマース サイトのショッピング カート ウィジェットなど) を保持します。を使用し、残りのコンテンツは を介して非同期にフェッチされますAjax
。新しいコンテンツがフェッチされると、それに応じて UI が変更され、新しいコンテンツがstate
履歴スタックにプッシュされ、それに応じて URL が変更されます。ここでディクショナリとして使用される属性を通じて、data
ユーザーが前後に移動してそのページに再び到達したときに何を表示するかに関する情報を保存します。このようなもの:
history.pushState({mydata1: data, mydata2: anotherData},"newTitle",newURL);
そのため、ユーザーがブラウザの [戻る] ボタンを押すと、そのエントリが履歴スタックから取り出され、スタックの一番上にある新しいエントリのデータ属性から、新しいページが表示されます。現在のページも更新できます。
history.replaceState({mydata1: data, mydata2: anotherData}, "anotherTitle",newURL);
現在のページに関するすべての情報は、次の場所から取得できますstate
。
myState = history.state;
観察したことがあれば、Facebook も同じことを行います。ホームボタンをクリックするか、友達のプロフィールに移動しても、新しいページは読み込まれません。右側の通知ティッカーはそのまま残ります (新しいページ用に再度読み込まれるのではなく)。チャット ボックスが開かれている場合は、そのまま残ります。これは、ページが新しいページにリロードされず (この場合、チャットやティッカーを含むすべてのウィジェットもリロードする必要があります)、URL のみが動的に変更され、新しいコンテンツが Ajax を介して取得および表示されるためです。
API をサポートしていない でFacebookを表示すると、引き続き機能することがわかりますが、URL の変更動作は異なります。これは、ハッシュを変更して URL を変更するという古き良き方法に頼っているからです。IE8
History
最も簡単な解決策は、フレームまたは iframe を使用し、 のtarget
属性をa
フレームに設定する (またはフレーム内のリンクをクリックする) ことです。これにより、フレーム内に新しいページが表示され、ロケーション バーに frameset-html のアドレスが表示されます。
一部の情報のみを印刷する必要がある場合は、ダッシュ # 記号の後に印刷しても文書はリロードされません。