5

History.js がページ読み込み時にどのように機能するかについて、少し混乱しています。いくつかの実験を行いましたが、結果は不確定なようです。

私の Web サイトは検索エンジンであり、クエリは URL パラメータ: に保存されます?Query=cats。このサイトは純粋に JavaScript で書かれています。History.js は、新しい検索を行ったり、新しいクエリを更新したり、状態をプッシュしたりするときにうまく機能します。

Query私の問題は、ユーザーがパラメーターを含む URL を手動で入力した場合に初期状態を作成する方法です。これを実行しようとするたびに、場合によっては検索クエリを 2 回実行することになります。競合すると思われる 2 つのユースケースは次のとおりです。

  1. ユーザーが手動で URL ( mydomain.com?Query=cats) をアドレス バーに入力し、Enter キーを押します。
  2. ユーザーが外部ページに移動し、[戻る] ボタンをクリックする

どちらの場合も、javascript が読み込まれるため、URL パラメーターを参照して初期状態を生成します。

ただし、2 番目のケースでは、History.js は statechange イベントもトリガーします

必要なコード:

    History.Adapter.bind(window,'statechange',function() { // Note: We are using statechange instead of popstate
        var s = History.getState();
        if(s.data["Query"]){
          executeQuery(s.data);
        }
    });

そして $(document).ready で私は持っています

  // Get history from URL
  s = getQueryObjectFromUrl(location.href);
  if(s["Query"]){
      History.pushState(s,'',$.param(s))
  }

URL パラメータから初期状態の作成を処理するより良い方法はありますか?

4

2 に答える 2

1

私はあなたと同様の問題を抱えていたので、私がしたことは、にバインドされたstatechange関数を名前付き関数として定義することでした。それから、ページの読み込み時にも実行していました。

URI などを解析しようとするよりもうまく機能しました。

于 2013-11-26T18:10:46.363 に答える