History.js がページ読み込み時にどのように機能するかについて、少し混乱しています。いくつかの実験を行いましたが、結果は不確定なようです。
私の Web サイトは検索エンジンであり、クエリは URL パラメータ: に保存されます?Query=cats
。このサイトは純粋に JavaScript で書かれています。History.js は、新しい検索を行ったり、新しいクエリを更新したり、状態をプッシュしたりするときにうまく機能します。
Query
私の問題は、ユーザーがパラメーターを含む URL を手動で入力した場合に初期状態を作成する方法です。これを実行しようとするたびに、場合によっては検索クエリを 2 回実行することになります。競合すると思われる 2 つのユースケースは次のとおりです。
- ユーザーが手動で URL (
mydomain.com?Query=cats
) をアドレス バーに入力し、Enter キーを押します。 - ユーザーが外部ページに移動し、[戻る] ボタンをクリックする
どちらの場合も、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 パラメータから初期状態の作成を処理するより良い方法はありますか?