この機能については以前にも簡単に紹介しましたが、今回はその原理と問題点について詳しく説明します(html5の新しいAPIを使用しているため、互換性の問題があります。モバイル端末での使用を推奨します)。
機能の説明:
ブラウザで新しいタブを作成し、URL を指定します。Web ページが読み込まれた後は、通常の手順ではクリックして戻ることはできません。現在のタブ ページには関連する履歴レコードがないため、返されるレコードはありません。
顧客のリクエストに応じて、この場合、リンク (ホームページなど) を履歴レコードに追加する必要があります。これにより、新しく開いたページで「戻る」をクリックするとホームページにジャンプできるようになります。ユーザーは、システムのさまざまな機能、プロモーション プラットフォームを確認できます。
1. 重要な知識
HTML5 では、history.pushState() メソッドとhistory.replaceState() メソッドが導入されており、これにより履歴エントリを 1 つずつ追加および変更できるようになります。これらのメソッドは、window.onpopstate イベントと連携して動作します。
ケース:
http://mozilla.org/foo.html が次の JavaScript コードを実行すると仮定します:
これにより、ブラウザのアドレス バーに http://mozilla.org/bar.html が表示されますが、bar.html ページは読み込まれず、HTML もチェックされません。存在します。
ユーザーが http://google.com に移動し、戻るボタンをクリックすると、この時点でアドレス バーに http://mozilla.org/bar.html とすると、このページは、popstate イベントをトリガーします。このイベントの状態オブジェクトには、stateObj のコピーが含まれます。このページは foo.html のように見えますが、ページのコンテンツは Popstate イベントで変更されている可能性があります。
もう一度戻るボタンをクリックすると、URL はhttp://mozilla.org/foo.html に戻ります。今度はドキュメントが別の Popstate イベントをトリガーします。状態オブジェクトは null です。ロールバックしてもドキュメントの内容は変更されません。
pushState() メソッド
PushState() は、状態オブジェクト、タイトル (現在は無視されています)、およびオプションの URL の 3 つのパラメータを取ります。これら 3 つのパラメータの詳細を個別に調べてみましょう:
state オブジェクト — PushState() メソッドで作成された新しい履歴エントリに関連付けられた JavaScript オブジェクト。ユーザーが新しく作成された状態に移動するたびに、popstate イベントが発生し、イベント オブジェクトの state プロパティには履歴エントリの state オブジェクトのコピーが含まれます。
任意のシリアル化可能なオブジェクトを状態オブジェクトとして使用できます。 FireFox ブラウザは状態オブジェクトをユーザーのハード ドライブに保存し、ユーザーがブラウザを再起動した後に復元できるようにするため、状態オブジェクトのサイズに 640k までの制限を設けています。この制限を超える状態オブジェクトを PushState() メソッドに渡すと、メソッドは例外をスローします。大量のデータを保存する必要がある場合は、sessionStorage または localStorage を使用することをお勧めします。
title — FireFox は現在このパラメータを無視しますが、将来的には使用される可能性があります。このメソッドは将来変更される可能性があることを考慮して、空の文字列を渡す方が安全です。あるいは、これから入力しようとしている状態を示す短いタイトルを渡すこともできます。
アドレス (URL) — 新しい履歴エントリのアドレス。ブラウザは、pushState() メソッドを呼び出した後はアドレスをロードしませんが、ユーザーがブラウザを再起動するときなど、後でアドレスをロードしようとする場合があります。新しい URL は絶対パスである必要はありません。相対パスの場合は、受信 URL と現在の URL が同じオリジンを持つ必要があります。そうでない場合は、pushState() が例外をスローします。 。このパラメータはオプションです。指定しない場合は、ドキュメントの現在の URL になります。
注: Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1) から Gecko 5.0 (Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2) では、受信オブジェクトは JSON を使用してシリアル化されます。 Gecko 6.0 (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3) 以降、オブジェクトは構造化コピー アルゴリズムを使用してシリアル化されます。これにより、より多くの種類のオブジェクトを安全に渡すことができるようになります。
ある意味では、pushState() の呼び出しは、現在のドキュメント内に新しい履歴エントリを作成してアクティブにするという点で、window.location='#foo' を設定するのと似ています。しかし、pushState() には独自の利点があります:
2. 個人のニーズに応じて URL を変更するかどうかを決定します。代わりに、window.location='#foo' を設定すると、現在のハッシュ値が foo でない場合にのみ新しい履歴レコードが作成されます。
3. 新しい履歴エントリに要約データを追加できます。ハッシュベースの方法を使用する場合、関連するデータを非常に短い文字列にのみトランスコードできます。
新しいアドレスがハッシュを変更するだけであっても、pushState() メソッドは hashchange イベントをトリガーしないことに注意してください。
ポップステートイベント
アクティブ化された履歴が変更されるたびに、popstate イベントが発生します。アクティブ化された履歴エントリが PushState によって作成された場合、または replaceState メソッドの影響を受けた場合、popstate イベントの state プロパティには履歴の state オブジェクトのコピーが含まれます。
replaceState() メソッド
History.replaceState() オペレーションは、replaceState() メソッドが新しいエントリを作成するのではなく、現在の履歴エントリを変更することを除いて、history.pushState() に似ています。
2. 実装アイデア
1. Popstate イベントを使用して、クリック リターン イベントを監視します。
3. 戻るページがない場合は、2 つのレコードを挿入します。
1)、指定されたジャンプページ。
2)、空のレコード。 (現在のページは変更しないでください)
3. 実装方法
//返回之前没页面则返回首页 function pushHistory() { if (history.length < 2) { var state = { title: "index", url: getHttpPrefix + "index.html" }; window.history.pushState(state, "index", location.href); state = { title: "index", url: "" }; window.history.pushState(state, "index", ""); } //lll("history.state" + history.state) //console.log(history.state) }
現在の履歴のレコード数を確認します。ページが読み込まれると、ブラウザーが自動的にレコードをプッシュします。したがって、長さが 2 未満かどうかを判断する必要があります。
挿入された状態オブジェクトは、対応する URL リンクを取得するために使用されます。
注:
最初の PushState では、ジャンプ操作を容易にするためにジャンプ URL を状態オブジェクトに入れました。現在のブラウザは基本的にこのパラメータをサポートしていないため、2 番目のパラメータには実際的な意味はありません。
3 番目のパラメータは現在のアドレス バーのリンクを置き換えますが、ページはジャンプしません。 (以前、3 番目のパラメータをホームページのリンクに設定するという間違いを犯しました。そのため、アドレス バーがホームページのリンクに変更され、現在のページのリンクがホームページに基づいてジャンプし、ページ上のすべてのリンクが間違った転送)
setTimeout(function () { pushHistory() window.addEventListener("popstate", function (e) { lll("popstate"+window.history.state) if (window.history.state != null && window.history.state.url != "") { location.href = window.history.state.url } }); }, 300);
このコードは、ページのreadyイベントに配置され、実行されます。300ミリ秒の遅延は、操作を遅らせ、システムのpopイベントとの競合を防ぐためです。
if ステートメントは、履歴に状態オブジェクトがあるかどうかを判断するものです。要件を満たすレコードのみが追加した状態オブジェクトを持つため、この点に基づいてページ ジャンプ操作を実行できます。
これにより、希望する効果が得られます。
4. 最後に書きます
欠点:
1. 明らかに、冒頭で述べたとおりです。 HTML5 をサポートするブラウザにのみ適しています。
2. WeChat などのモバイル端末でのリターンと同様に、2 つのレコードが挿入されるため、ページを起動して WeChat チャット ウィンドウに戻るには、リターンをさらに 2 回クリックする必要があり、ユーザー エクスペリエンスが悪くなります。
概要:
この方法は間違いなく最適化して完成させることができますが、現在の私の力ではそれを完成させるには不十分です。
この記事を読んだ友人がインスピレーションを得たり、それを達成するためのより良い方法を見つけたりできることを願っています。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

Dreamweaver Mac版
ビジュアル Web 開発ツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。
