よく知られているように、XHR (別名 AJAX) Web アプリケーションでは、アプリの履歴が構築されず、更新ボタンをクリックすると、ユーザーが現在のアクティビティから移動することがよくあります。更新の問題を回避するために、 location.hash (例) に遭遇しました ( http://anywhere/index.html#somehashvalue
location.hash を使用してアプリに現在の状態を通知し、ページ読み込みハンドラーを使用してその状態をリセットします)。それは本当に素敵でシンプルです。
これにより、location.hash を使用してアプリの履歴を追跡することを考えるようになりました。既存のライブラリは iframe などを使用するため、使用したくありません。アプリケーション ページがロードされたら、次のように開始します。
setInterval(
function(){
if (location.hash !== appCache.currentHash) {
appCache.currentHash = location.hash;
appCache.history.push(location.hash);
/* ... [load state using the hash value] ... */
return true;
}
return false;
}, 250
);
( appCacheは、アプリケーション変数を含む事前定義されたオブジェクトです) アイデアは、アプリケーション内のすべてのアクションをハッシュ値からトリガーすることです。適切なブラウザーでは、ハッシュ値の変更により履歴にエントリが追加されますが、IE (<= 7) では追加されません。すべてのブラウザーで、別のハッシュ値を持つページに戻るか進むと、ページの更新はトリガーされません。それが intervalled 関数が引き継ぐところです。この関数を使用すると、ハッシュ値の変更が (プログラムによって、または前後にクリックすることによって) 検出されるたびに、アプリは適切なアクションを実行できます。アプリケーションはそれ自体の履歴を追跡でき、アプリケーションに履歴ボタンを表示できるはずです (特に IE ユーザー向け)。
私が知る限り、これはクロス ブラウザで機能し、メモリやプロセッサ リソースのコストはかかりません。私の質問は、これは XHR アプリで履歴を管理するための実行可能なソリューションでしょうか? 長所と短所は何ですか?
更新:自作フレームワークを使用しているため、既存のフレームワークのいずれかを使用したくありませんでした。location.hash を IE で使用できるようにし、その履歴にも含めるために、役に立つかもしれない簡単なスクリプト (はい、iframe が必要です) を作成しました。私はそれを自分のサイトに公開しました。自由に使用/変更/批判してください。