この記事は主に、H5 での PushState と replaceState の使用法について簡単に説明するための関連情報を紹介します。内容は非常に優れているので、参考として共有します。
1. はじめに
HTML5 では、history.pushState() メソッドとhistory.replaceState() メソッドが導入されており、それぞれ履歴エントリを追加および変更できます。これらのメソッドは通常、window.onpopstate と組み合わせて使用されます。
2. PushState() メソッドの例
次の JavaScript コードが http://mozilla.org/foo.html で実行されると仮定します。
var stateObj = { foo: "bar" }; history.pushState(stateObj, "page 2", "bar.html");
これにより、ブラウザのアドレス バーが http として表示されます。 : //mozilla.org/bar.html ただし、ブラウザは bar.html をロードせず、bar.html が存在するかどうかも確認しません。
ここで、ユーザーが http://google.com にアクセスして、「戻る」ボタンをクリックしたとします。このとき、アドレス バーには http://mozilla.org/bar.html が表示され、ページは Popstate イベントをトリガーします。イベント オブジェクトの state には stateObj のコピーが含まれます。ページ自体は foo.html と同じですが、その内容は Popstate イベントで変更される可能性があります。
もう一度戻るボタンをクリックすると、ページの URL が http://mozilla.org/foo.html に変わり、ドキュメント オブジェクト document が別の Popstate イベントをトリガーします。今回は、イベント オブジェクトの状態オブジェクトは null です。 ここでも同様に、戻ってもドキュメントの内容は変わりません。popstate イベントを受信するとドキュメントの内容が変更される可能性がありますが、その内容は以前のプレゼンテーションと一貫性が保たれます。
3. PushState() メソッド
4. PushState() メソッドとハッシュ値の設定の違い
ある意味、pushState() の呼び出しは window.location = "#foo" を設定するのと似ています。両方とも現在のページに作成されます。新しい履歴をアクティブ化します。ただし、pushState() には次の利点があります: 新しい URL は、現在の URL と同じオリジンを持つ任意の URL にすることができます。また、window.location を設定すると、ハッシュを変更しただけの場合にのみ同じファイルが保持されます。 必要に応じて、URLを変更せずに履歴レコードを作成できます。 window.location = "#foo"; と設定すると、現在のハッシュが #foo でない場合にのみ新しい履歴項目が作成されます。 あらゆるデータを新しい履歴項目に関連付けることができます。ハッシュ値ベースの方法では、すべての関連データを短い文字列にエンコードする必要があります。5. replaceState() メソッド
history.replaceState() の使用法は、history.pushState() と非常によく似ていますが、replaceState() は新しい履歴項目を作成するのではなく、現在の履歴項目を変更するという点が異なります。 。6. Popstate イベント
アクティブな履歴エントリが変更されるたびに、対応するウィンドウ オブジェクトで Popstate イベントがトリガーされます。 現在アクティブな履歴エントリが、history.pushState() メソッドによって作成されたか、history.replaceState() メソッドによって変更された場合、popstate イベント オブジェクトの state プロパティには、履歴エントリの state オブジェクトのコピーが含まれます。 次のように、履歴オブジェクトの状態を直接取得することもできます:var currentState = history.state;
7. Popstate イベントの例
現在の Web ページのアドレスが http://example.com/example.html の場合、次のコードを実行した後:window.onpopstate = function(event) { alert("location: " + document.location + ", state: " + JSON.stringify(event.state)); }; //绑定事件处理函数. history.pushState({page: 1}, "title 1", "?page=1"); //添加并激活一个历史记录条目 http://example.com/example.html?page=1,条目索引为1 history.pushState({page: 2}, "title 2", "?page=2"); //添加并激活一个历史记录条目 http://example.com/example.html?page=2,条目索引为2 history.replaceState({page: 3}, "title 3", "?page=3"); //修改当前激活的历史记录条目 http://ex..?page=2 变为 http://ex..?page=3,条目索引为3 history.back(); // 弹出 "location: http://example.com/example.html?page=1, state: {"page":1}" history.back(); // 弹出 "location: http://example.com/example.html, state: null history.go(2); // 弹出 "location: http://example.com/example.html?page=3, state: {"page":3}
8. の目的PushState()
王二使用 pushState() 主要是它可以监听到浏览器上的返回事件,这在移动端上也同样适用,参考如下一段代码(可以直接运行):
<body> <p>window.onpopstate可以监听到返回键事件</p> <script> history.pushState({}, ""); window.onpopstate = function(event) { //这里可以监听到浏览器的返回事件,并做你想做的事情, //例如:跳转到另一个网页 location.href = "https://www.baidu.com"; }; </script> </body>
当然,用 window.onhashchange 也可以监听到浏览器上的返回事件,参考如下一段代码(可以直接运行):
<body> <p>window.onhashchange可以监听到返回键事件</p> <script> setTimeout(()=>{ location.hash="a" },100); setTimeout(()=>{ window.onhashchange = function(event) { location.href = "https://www.baidu.com"; } },200); </script> </body>
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
关于HTML5
input placeholder 的颜色修改
以上がH5 の PushState と replaceState の使用分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。