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 を使用して、仮想マシンのストレージ パフォーマンスの監視を改良する

推薦する

Linuxで環境変数を削除する詳細な手順

Linuxで環境変数を削除するには?unsetコマンドを使用してすぐに削除します1. Linuxクラ...

js が CSS 属性 (値) のサポートを決定して通知する状況の分析

新しい CSS 機能を使用する場合、その互換性は常に考慮されます。おそらく、その互換性、どのブラウザ...

dockerコマンドの使用にはsudoは必要ありません

docker デーモンは通常の TCP ポートではなくホストの Unix ソケットにバインドする必要...

Mac で docker と kubectl の自動補完コマンドを追加する方法

kubectl の紹介kubectl は、k8s クラスターを操作するためのコマンドライン ツールで...

HTML から PDF への変換事例の概要 (複数の画像を推奨)

仕事の都合上、最近 HTML を PDF に変換する機能について調べることに時間を費やしました。 H...

Vue.jsの機能コンポーネントに関する包括的な理解

目次序文React 関数コンポーネントVue (2.x) の機能コンポーネント🌰 例: el-tab...

Vue スキャフォールディング学習プロジェクト作成方法

1. 足場とは何ですか? 1. Vue CLI Vue CLI は、Vue.js をベースにした迅速...

Ubuntu 18.04 で apt-get ソースを変更する方法

apt-get を使用してインストールすると、非常に遅くなります。国内のソースを変更すると、この問題...

MySQL pt-slave-restart ツールの使い方の紹介

目次MySQL マスター スレーブ レプリケーション環境を設定する場合、マスター データベースとスレ...

MySQL 学習のまとめ: InnoDB ストレージ エンジンのアーキテクチャ設計の予備的な理解

1. ストレージエンジン前のセクションでは、SQL 実行プランは、エグゼキュータ コンポーネントがス...

Chromeの最小フォントサイズ制限12pxに対する最終的な解決策

ウェブサイトを作成するユーザーの多くが、このような問題に遭遇すると思います。Chrome のデフォル...

Docker Compose のサイドカーモードの詳細な説明

目次Docker Composeとは要件に不適切な言語が使用されている実装Docker Compos...

docker compose デプロイメントにおけるマスタースレーブレプリケーションの実装

目次構成解析サービス構築ディレクトリ構造ファイルを作成インスタンス構成サービスを開始するテストRed...

Linux の権限管理コマンド (chmod/chown/chgrp/unmask) の詳細な説明

目次chmod例権限に関する特別な注意分析するチョーンchgrp umask Linux オペレーテ...

さまざまな Tomcat ログと catalina.out ファイルのセグメンテーションの関係についての簡単な分析

Tomcatログの関係一枚の写真は千の言葉に値する! localhost.{yyyy-MM-dd}....