JavaScript 履歴オブジェクトの説明

JavaScript 履歴オブジェクトの説明

序文:

ウェブページを閲覧するとき、前後に移動する操作にはあまり注意を払わないかもしれません。しかし、開発するときに、ページ間を移動すると何が起こるのか、ブラウザはページ情報をどのように保存するのか、前のページに戻るときにページを再読み込みする必要があるのか​​など、考えたことがありますか?多くの疑問が浮かびます。これらの問題を解決するには、まずブラウザのwindowの下にあるhistoryオブジェクトを知る必要があります。この記事では、このオブジェクトの関連する知識ポイントを詳細にまとめます。

historyオブジェクトは、現在のウィンドウが最初に使用されてからのユーザーのナビゲーション履歴を表します。 history windowのプロパティであるため、各windowは独自のhistoryオブジェクトがあります。セキュリティ上の理由から、このオブジェクトはユーザーがアクセスした URL を明らかにしませんが、実際の URL を知らなくても前後に移動することができます。

1. ルートナビゲーション

history.go()メソッドは、ユーザーの履歴を前方または後方の任意の方向に移動します。このメソッドは 1 つのパラメータのみを受け入れます。このパラメータは、前方または後方に移動するステップ数を表す整数になります。

 history.go(-1);// 1ページ戻るhistory.go(1);// 1ページ進むhistory.go(2);// 2ページ進む//

go() には back() と forward() という 2 つの短縮メソッドがあります。

history.back(); // 1ページ戻る history.forward(); // 1ページ進む

historyオブジェクトにはlength属性もあります。history.length history.length == 1これがユーザー ウィンドウの最初のページであることを意味します。

histroyの go メソッド、 backメソッド、forward forword 、およびブラウザ上のユーザーマニュアルの進むボタンと戻るボタンにより、ページが更新されてジャンプします。

2. 履歴状態管理API

(1)ハッシュチェンジイベント

hashchange:history hashchangeです。これは、ページ URL のハッシュが変更されたときにトリガーされ、開発者はこの時点で特定の操作を実行できます。 hashchangeイベントは、URL のフラグメント識別子 (# 記号を含む、# 記号に続く URL の部分) が変更されたときに発生します。状態管理 API を使用すると、開発者は新しいページをロードせずにブラウザの URL を変更できます。

たとえば、 pushState メソッドと replaceState メソッドでは、ページは更新されませんが、ルートは変更されます。

(2)ポップステートイベント

アクティブな履歴エントリが変更されると、 popstateイベントが発生します。アクティブ化される履歴エントリがhistory.pushState ()の呼び出しによって作成された場合、またはhistory.replaceState()の呼び出しによって影響を受けた場合、 popstate イベントの state プロパティには、履歴エントリの状態オブジェクトのコピーが含まれます。 history.pushState()またはhistory.replaceState()を呼び出してもpopstateイベントはトリガーされないことに注意してください。このイベントは、ユーザーがブラウザの戻るボタンをクリックしたとき (または、 Javascriptコードでhistory.back()またはhistory.forward()を呼び出したとき) など、ブラウザのアクションが実行されたときにのみトリガーされます。

(3) history.pushState() メソッド

pushState()メソッドは、現在のブラウザ セッションの履歴スタックに状態を追加します。このメソッドは、状態オブジェクト、新しい状態のタイトル、および (オプションの) 相対 URL の 3 つのパラメータを受け取ります。 pushState()メソッドが実行されると、状態情報が履歴レコードにプッシュされ、ブラウザのアドレス バーが新しい相対 URL を反映して変更されます。 URLバーには新しいアドレスが表示されますが、ページは読み込まれず、ページが存在するかどうかも確認されません。このメソッドはhistory.lengthを増加させます。

(4) history.replaceState() メソッド

replaceState()メソッドは、現在の履歴エントリを変更します。このメソッドは、 stateオブジェクト、新しい状態のタイトル、および (オプションの) 相対 URL の 3 つのパラメータを受け取ります。 r eplaceState()メソッドが実行されると、現在のstateオブジェクトまたは現在の履歴エンティティの URL がユーザーのアクションに応じて更新されます。URL バーには新しいアドレスが表示されますが、ページは読み込まれず、ページが存在するかどうかもチェックされません。このメソッドはhistory.lengthを増加させません。

<本文>
  <button onclick="handleNext()">クリックして次のページへ進みます</button><br>
  <button onclick="handleLast()">クリックして前のページへ移動</button><br>
  <スクリプト>
    window.onload = 関数(){
      コンソールにログを記録します。
    }
    window.addEventListener('hashchange', 関数() {
      console.log('ハッシュが変更されました!')
    }、 間違い);
    window.addEventListener('popstate', (イベント) => {
      console.log("場所: " + document.location + "、状態: " + JSON.stringify(event.state));
    });
    関数handleNext() {
      const 状態 = { ユーザー ID: "1234", ページ: "2" }
      const タイトル = '2'
      定数 url = 'page2.html'
      window.history.pushState(状態、タイトル、URL)
      コンソールにログを記録します。
    }
    関数handleLast() {
      const 状態 = { ユーザー ID: "1234", ページ: "21" }
      const title = '一'
      定数 url = 'page21.html'
      window.history.replaceState(状態、タイトル、URL)
      コンソールにログを記録します。
    }
  </スクリプト>
</本文>

結果は次のとおりです。

3. 補足: URLハッシュ

URL のhashアンカー (#) であり、基本的にwindow.locationhref属性を変更します。 location.hashを直接割り当てることで href を変更できますが、ページは更新されません。

次の図に示すように:

最後の言葉:

avaScript historyオブジェクトの詳しい説明はこれで終了です。履歴オブジェクトの詳細については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScript BOMの構成と一般的なイベントの詳細な説明
  • JavaScript における BOM と DOM の詳細な説明
  • JavaScript 履歴オブジェクトの原理分析
  • JavaScript の navigator.userAgent がブラウザ情報を取得するケースの説明
  • JSロケーションを使用して検索ボックスの履歴機能を実装する
  • JavaScript BOM ロケーション オブジェクト + ナビゲーター オブジェクト + 履歴オブジェクト

<<:  MySQL テーブルを返すとインデックスが無効になるケースの説明

>>:  VMware IOInsight を使用して、仮想マシンのストレージ パフォーマンスの監視を改良する

推薦する

MySQL の例 DTID マスタースレーブ原理の分析

目次1. GTIDの基本概念2. GTIDの利点3. GTIDの仕組み4. 従来のレプリケーションに...

Docker で Redis クラスターを素早く構築する方法の例

Redis クラスターとはRedis クラスターは、R​​edis が提供する分散データベース ソリ...

nginx+php-fpm サービスの HTTP ステータス コード 502 の詳細な分析

弊社の Web プロジェクトの 1 つでは、新しい都市の増加によりトラフィックと DB 負荷が増加し...

Vue Routerはバックグラウンドデータに応じて異なるコンポーネントをロードします

目次実際のプロジェクトで遭遇する要件実装が間違っているところもある私は個人的に、実装するより良い方法...

面接官はReactのライフサイクルについてよく質問します

ReactライフサイクルReactのライフサイクルを理解するのに役立つ2つの図React ライフサイ...

JavaScriptは4桁のランダム検証コードの生成を実装します

この記事の例では、JavaScriptで4桁のランダムな検証コードを生成する具体的なコードを参考まで...

MySQL で遅い SQL 文を見つける方法

MySQL で遅い SQL ステートメントを見つけるにはどうすればよいでしょうか?これは、多くの人を...

React スキャフォールディングの構築方法を学ぶ

1. フロントエンドエンジニアリングの複雑さいくつかの小さなデモ プログラムを開発するだけであれば、...

トランザクション分離レベルのMySQLケース分析

目次1. 理論シリアル化可能繰り返し読み取りコミットされた読み取りコミットされていない読み取り2. ...

JavaScript カスタム カレンダー効果

この記事では、JavaScriptカスタムカレンダーエフェクトの具体的なコードを参考までに紹介します...

ウェブページのCSSの優先順位について詳しく説明します

CSS の優先順位について話す前に、CSS とは何か、CSS が何に使用されるのかを理解する必要があ...

VueプロジェクトでReactを書く方法の詳細

jsx/tsxファイルを直接作成できます今回のプロジェクト構成は以下のとおりです。 vueファイルで...

CSS3 シンプルカットカルーセル画像実装コード

実装のアイデアまず、親コンテナーを作成し、2 つの順序なしリストを使用して、柔軟なレイアウトで親コン...

MySQL ストレステストツール Mysqlslap の使用

1. MySQL独自のストレステストツールMysqlslap mysqlslap は、mysql に...