1. 同期AJAXデータをサーバーに送り返す一般的な方法は、収集したユーザー データをアンロード イベントに配置し、AJAX リクエストを使用してサーバーに送り返すことです。 ただし、Web ページはすでにアンロードされており、ブラウザーがそれを送信するかどうかは不明であるため、非同期 AJAX はアンロード イベントで成功しない可能性があります。したがって、同期 AJAX リクエストに変更する必要があります。 window.addEventListener('unload', 関数(イベント) { xhr = new XMLHttpRequest(); xhr.open('post', '/log', false); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send('foo=bar'); }); 上記のコードでは、xhr.open() メソッドの 3 番目のパラメーターは false であり、同期要求を示しています。 このアプローチの最大の問題は、ブラウザがメインスレッドでの同期 AJAX の使用を徐々に許可しなくなることです。したがって、上記のコードは実際には機能しません。 2. 非同期AJAX非同期 AJAX は実際に機能します。前提として、アンロード イベントには時間のかかる同期操作がいくつかある必要があります。これにより、非同期 AJAX が正常に送信されるのに十分な時間が確保されます。 関数log() { xhr = new XMLHttpRequest(); xhr.open('post', '/log', true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send('foo=bar'); } window.addEventListener('unload', 関数(イベント) { ログ(); // 時間のかかる操作 (i = 1; i < 10000; i++ とします) { (m = 1、m < 10000、m++ とします) { 続行; } } }); 上記のコードでは、二重ループが強制的に実行され、アンロード イベントの実行時間が長くなり、非同期 AJAX が正常に送信されます。 3. ユーザーのクリックを追跡するsetTimeout は、非同期リクエストが正常に送信されるようにページのアンロードを遅らせることもできます。以下は、ユーザーのクリックを追跡する例です。 // HTML コードは次のとおりです // <a id="target" href="https://baidu.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" >クリック</a> クリックタイム = 350; const theLink = document.getElementById('target'); 関数log() { xhr = new XMLHttpRequest(); xhr.open('post', '/log', true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send('foo=bar'); } theLink.addEventListener('click', 関数(イベント) { イベントをデフォルトにしない(); ログ(); setTimeout(関数() { window.location.href = theLink.getAttribute('href'); }, クリック時間); }); 上記のコードでは、setTimeout を使用してページのリダイレクトを 350 ミリ秒間遅延し、非同期 AJAX の送信時間を確保しています。 4. リバウンドトラッキングユーザーのクリックを追跡し、バウンス トラッキングを使用します。 いわゆる「バウンス トラッキング」とは、Web ページがジャンプするときに、まず 1 つ以上の中間 URL にジャンプして情報を収集し、その後元のターゲット URL にジャンプすることを意味します。 // HTML コードは次のとおりです // <a id="target" href="https://baidu.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" >クリック</a> const theLink = document.getElementById('target'); theLink.addEventListener('click', 関数(イベント) { イベントをデフォルトにしない(); window.location.href = '/jump?url=' + encodeURIComponent(theLink.getAttribute('href')); }); 上記のコードでは、ユーザーがクリックすると、強制的に中間 URL にジャンプし、情報を引き継いで処理した後、元のターゲット URL にジャンプします。 Google と Baidu は現在これを実行しています。検索結果をクリックすると、対象の URL にジャンプする前に複数回バウンスします。 5. ビーコンAPI上記の方法を実行すると、Web ページのアンインストールが遅れ、ユーザー エクスペリエンスに重大な影響が生じます。 ウェブページがアンロードされたときに非同期リクエストが成功しない問題を解決するために、ブラウザは特別にビーコン API を実装しました。これにより、非同期リクエストを現在のメイン スレッドから分離してブラウザ プロセスで送信できるようになり、確実に送信されるようになります。 window.addEventListener('unload', 関数(イベント) { navigator.sendBeacon('/log', 'foo=bar'); }); 上記のコードでは、navigator.sendBeacon() メソッドによって非同期リクエストが送信されることが保証されます。最初のパラメーターは要求する URL であり、2 番目のパラメーターは送信するデータです。 Beacon API は POST リクエストを発行することに注意してください。 6. PingプロパティHTML <a> タグには ping 属性があります。ユーザーがクリックすると、属性で指定された URL に POST リクエストが送信されます。 <a href="https://baidu.com" rel="外部nofollow" rel="外部nofollow" rel="外部nofollow" ping="/log?foo=bar"> クリック </a> 上記のコードでは、ユーザーがジャンプ ボタンをクリックすると、POST リクエストが URL /log に送信されます。 ping 属性ではデータ本体を指定できず、情報は URL のクエリ文字列を通じてのみ伝達されるようです。 上記は、JS でユーザーを追跡する方法の詳細です。JS でユーザーを追跡する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Linux プロセスの CPU 使用率が 700% に達し、終了できない場合の解決策
>>: MySQL 5.7 のルートパスワードログイン問題の解決策
序文「画像処理というと、PhotoShop などの画像処理ツールを思い浮かべることが多いです。フロン...
この記事では、jQueryプラグインを使用してアコーディオンセカンダリメニューを作成します。具体的な...
結合の種類1. 内部結合: 結合関係を持つ 2 つのテーブル内のフィールドは、結合関係を満たすレコー...
目次1. axioの基本的な使い方2. クロスドメインの問題を解決するには? 3. パッケージ4. ...
DataGrid コントロールの DataSource プロパティがデザイン時に設定されている場合、...
ソフトウェアのダウンロードソフトウェアのダウンロード リンク: https://pan.baidu....
目次1. はじめに2. MVCC (マルチバージョン同時実行制御メカニズム) 2.1 繰り返し読み取...
[LeetCode] 183.注文しない顧客Web サイトに、Customers テーブルと Or...
本日のプロジェクト最適化中に、MySQL に問題が発生しました: 定義者として指定されたユーザー (...
エラーメッセージ:ユーザー: 'root' ホスト: `localhost'...
1. 絶対パスまず、ローカル コンピューターでは、ファイルの絶対パスは、当然、ハード ディスク上でフ...
1. 足場とは何ですか? 1. Vue CLI Vue CLI は、Vue.js をベースにした迅速...
JS はホバー ドロップダウン メニューを実装します。これは、フロントエンドの面接で遭遇するシナリ...
目次1.union: クエリ結果を追加できます1) すべてを結合: 重複を削除できません2) ユニオ...
序文:データベースの運用や保守の際には、リンクの総数がいくつあるか、アクティブなリンクがいくつあるか...