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

推薦する

backgroundImage を使用して画像カルーセルの切り替えを解決する詳細な説明

単一のDOMノードでカルーセルを実装するbackgroundImage を使用すると、複数の画像を追...

検索データ表示を実装するJavaScript

この記事ではJavaScript検索のデータ表示コードを参考までに共有します。具体的な内容は以下のと...

CentOS8.0ネットワーク設定の実装

1. CentOS 7 と CentOS 8 のネットワーク構成の違い: VMware Workst...

Nginx イントラネット スタンドアロン リバース プロキシの実装

目次1 Nginxのインストール2 Nginxの設定3 ホストファイルを変更する4 テストNginx...

HTML テーブルの境界線を設定する際のヒント

HTML を初めて使用する多くの人にとって、テーブル <table> は最もよく使用され...

Windows7 での Mysql5.7 my.ini ファイルの読み込みパスとデータの場所の変更方法

更新: MySQL の公式 Web サイトにアクセスして MySQL インストーラーをインストールし...

MySQL シリーズ 4 SQL 構文

目次チュートリアルシリーズ1. SQL言語の紹介と仕様2. データベース操作1. ライブラリを作成す...

ローカルサーバーを構築するためのwebpack-dev-serverの実装

目次序文webpack-deb サーバーwebpack-dev-server 起動エラー解決策1解決...

ウェブページを最適化してメモリとCPUの使用率を削減

一部の Web ページは大きく見えなくても開くのに非常に時間がかかる場合があります。一方、他の We...

vscodeを使用してReact Native開発環境を構築する方法を教えます

質問コードにはプロンプトがありません: RN 開発に不慣れな、フロントエンド以外の学生の多くは、「ど...

純粋な JS を使用して vue.js で双方向バインディング機能を実装する方法

目次まず、双方向バインディングを実装するアイデアについて説明します。これらの機能を実装するための j...

Vue で SuperMap を使用する練習

目次序文関連資料Vue プロジェクトが 2 次元ハイパーグラフを導入ハイパーグラフ 2D ケース引用...

Vue が値を返してフォームを動的に生成し、データを送信する仕組みの詳細な説明

目次解決された主な問題1. バックエンドから返され、バックエンドに送信されるデータは、次の形式になり...

Dockerはコンテナにポートを動的に公開します

コンテナのIPアドレスを表示するdocker examine <コンテナ名またはID> ...

CSSを使用してすべての子要素を選択する方法の詳細な説明

CSS を使用してすべての子要素を再帰的に選択するにはどうすればよいですか?以下の記事では、CSS ...