ホームページ 運用・保守 安全性 JavaScriptでHistoryオブジェクトを使用する方法

JavaScriptでHistoryオブジェクトを使用する方法

Jun 02, 2023 pm 04:55 PM
javascript history

length

History.length プロパティには、履歴内の URL の数が保存されます。初期状態では、この値は 1 です。 IE10 ブラウザは最初に 2 を返すため、互換性の問題があるため、この値は一般的には使用されません

Jump メソッド

go()、back()、forward()

移動した位置がアクセス履歴の境界を超えた場合、上記の 3 つのメソッドはエラーを報告しませんが、サイレントに失敗します

[注意] 履歴レコードを使用する場合、通常、ページはブラウザーのキャッシュから読み込まれます。サーバーに新しい Web ページを再度送信するように要求する代わりに。 onload をトリガーしません

レコードの追加と変更

HTML5 では、履歴オブジェクトに 2 つの新しいメソッド、history.pushState() とhistory.replaceState() が追加されます。閲覧履歴を記録します。 state 属性はレコード オブジェクトの保存に使用され、popstate イベントは履歴オブジェクトの変更の監視に使用されます。

# History.pushState() メソッドはブラウザ履歴に状態を追加します。 PushState() メソッドは 3 つのパラメータを取ります: 状態オブジェクト、タイトル (現在は無視されています)、およびオプションの URL アドレス

##history.pushState(state, title, url);

状態オブジェクト- 状態オブジェクトは、pushState() メソッドによって作成され、履歴レコードに関連する JavaScript オブジェクトです。ユーザーが新しい状態に誘導されると、popstate イベントがトリガーされます。イベントの状態プロパティには、履歴の状態オブジェクトが含まれます。このオブジェクトが必要ない場合は、null

Title - 新しいページのタイトルを入力できますが、現在すべてのブラウザはこの値を無視するため、ここに null

を入力できます。 URL - this パラメータは、新しい履歴レコードのアドレスを提供します。新しい URL は現在の URL と同じドメイン内にある必要があります。そうでない場合、pushState() は例外をスローします。このパラメータはオプションです。特にマークされていない場合は、ドキュメント

の現在の URL に設定されます。現在の URL が example.com/1.html であると仮定すると、pushState メソッドを使用して追加します新しいレコード

var stateObj = { foo: 'bar' };
history.pushState(stateObj, 'page 2', '2.html');
ログイン後にコピー

上記の新しいレコードを追加すると、ブラウザのアドレス バーにすぐに example.com/2.html が表示されますが、2.html にはジャンプしません。 、または 2.html を確認してください。存在する場合は、閲覧履歴の最新のエントリになるだけです。この時点で google.com にアクセスし、戻るボタンをクリックすると、ページの URL には 2.html が表示されますが、コンテンツは元の 1.html のままです。もう一度巻き戻しボタンをクリックすると、URL に 1.html が表示され、内容は変更されません。

つまり、pushState メソッドはページの更新をトリガーせず、履歴オブジェクトが変更され、表示される内容が変更されるだけです。変更するアドレスバーのアドレス

PushState の url パラメータが新しいアンカー値 (つまりハッシュ) を設定した場合、新しい URL が古い URL と異なるだけであっても、hashchange イベントはトリガーされません。ハッシュ

設定されている場合 クロスドメイン URL が指定されている場合、エラーが報告されます。この設計の目的は、悪意のあるコードによってユーザーが別の Web サイトにいると思わせないようにすることです。

[replaceState()]

history.replaceState メソッドのパラメーターは、 PushState メソッドと相違点 replaceState() メソッドは、新しいエントリを作成する代わりに、現在の履歴エントリを変更します。

現在の Web ページが example.com/example.html

history.pushState({page: 1}, 'title 1', '?page=1');
history.pushState({page: 2}, 'title 2', '?page=2');
history.replaceState({page: 3}, 'title 3', '?page=3');
history.back()
// url显示为http://example.com/example.html?page=1
history.back()
// url显示为http://example.com/example.html
history.go(2)
// url显示为http://example.com/example.html?page=3
ログイン後にコピー

であると仮定します。 【state】

history.stateプロパティは、同じドキュメントの閲覧履歴(つまり、 、履歴オブジェクト) が変更されると、popstate イベントがトリガーされます

[注意] PushState メソッドまたは replaceState メソッドを呼び出しただけでは、このイベントはトリガーされないことに注意してください。ユーザーがブラウザーの戻るボタンをクリックして、 [進む] ボタン、または JavaScript を使用して back()、forward()、go() メソッドのみがトリガーされます。また、このイベントは同じドキュメントのみを対象とします。閲覧履歴が切り替わり、異なるドキュメントが読み込まれた場合、イベントはトリガーされません。

使用する場合は、popstate イベントのコールバック関数を指定できます。このコールバック関数のパラメータはイベント イベント オブジェクトであり、その state 属性は、現在の URL の PushState メソッドと replaceState メソッドによって提供される state オブジェクト (つまり、これら 2 つのメソッドの最初のパラメータ) を指します。

上記のコードでは、event.state は、pushState メソッドと replaceState メソッドを通じて現在の URL にバインドされた状態オブジェクトです。

この状態オブジェクトは、履歴オブジェクト

history.pushState({page: 1}, 'title 1', '?page=1');
history.state// { page: 1 }
ログイン後にコピー

ラウンド トリップ キャッシュを通じて直接読み取ることもできます。

デフォルトでは、ブラウザは現在のセッションでページをキャッシュします。ユーザーが「進む」または「戻る」ボタンをクリックすると、ブラウザはキャッシュからページを読み込みます。ブラウザには「バックフォワード キャッシュ」(bfcache) と呼ばれる機能があり、ユーザーがブラウザの「戻る」ボタンと「進む」ボタンを使用したときにページ変換を高速化できます。このキャッシュはページ データを保存するだけでなく、DOM と JavaScript の状態も保存し、実際にはページ全体がメモリに保存されます。ページが bfcache にある場合、ページが再度開かれたときに読み込みイベントはトリガーされません

# [注意] IE10 - ブラウザーはサポートされていません

[pageshow]

  pageshow事件在页面加载时触发,包括第一次加载和从缓存加载两种情况。如果要指定页面每次加载(不管是不是从浏览器缓存)时都运行的代码,可以放在这个事件的监听函数

  第一次加载时,它的触发顺序排在load事件后面。从缓存加载时,load事件不会触发,因为网页在缓存中的样子通常是load事件的监听函数运行后的样子,所以不必重复执行。同理,如果是从缓存中加载页面,网页内初始化的JavaScript脚本(比如DOMContentLoaded事件的监听函数)也不会执行

  [注意]虽然这个事件的目标是document,但必须将其事件处理程序添加到window

  pageshow事件有一个persisted属性,返回一个布尔值。页面第一次加载时或没有从缓存加载时,这个属性是false;当页面从缓存加载时,这个属性是true

  [注意]上面的例子使用了私有作用域,以防止变量showCount进入全局作用域。如果单击了浏览器的“刷新”按钮,那么showCount的值就会被重置为0,因为页面已经完全重新加载了

  【pagehide】

  与pageshow事件对应的是pagehide事件,该事件会在浏览器卸载页面的时候触发,而且是在unload事件之前触发。与pageshow事件一样,pagehide在document上面触发,但其事件处理程序必须要添加到window对象

  [注意]指定了onunload事件处理程序的页面会被自动排除在bfcache之外,即使事件处理程序是空的。原因在于,onunload最常用于撤销在onload中所执行的操作,而跳过onload后再次显示页面很可能就会导致页面不正常

  pagehide事件的event对象也包含persisted属性,不过其用途稍有不同。如果页面是从bfcache中加载的,那么persisted的值就是true;如果页面在卸载之后会被保存在bfcache中,那么persisted的值也会被设置为true。因此,当第一次触发pageshow时,persisted的值一定是false,而在第一次触发pagehide时,persisted就会变成true(除非页面不会被保存在bfcache中)

window.onpagehide = function(e){
e = e || event;
console.log(e.persisted);
}
ログイン後にコピー

使用方法:

1、取消默认的返回操作

function pushHistory(){
 var state = {
    title: "title",
    url: "#"   
  }
 window.history.pushState(state, "title", "#");  
}

pushHistory()
ログイン後にコピー

2、history.js用于兼容html4,也可以监听pushState与replaceSate

以上がJavaScriptでHistoryオブジェクトを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

JavaScriptでinsertBeforeを使用する方法 JavaScriptでinsertBeforeを使用する方法 Nov 24, 2023 am 11:56 AM

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。

JavaScript で HTTP ステータス コードを簡単に取得する方法 JavaScript で HTTP ステータス コードを簡単に取得する方法 Jan 05, 2024 pm 01:37 PM

JavaScript で HTTP ステータス コードを取得する方法の紹介: フロントエンド開発では、バックエンド インターフェイスとの対話を処理する必要があることが多く、HTTP ステータス コードはその非常に重要な部分です。 HTTP ステータス コードを理解して取得すると、インターフェイスから返されたデータをより適切に処理できるようになります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法と、具体的なコード例を紹介します。 1. HTTP ステータス コードとは何ですか? HTTP ステータス コードとは、ブラウザがサーバーへのリクエストを開始したときに、サービスが

See all articles