JSでユーザーを追跡する方法

JSでユーザーを追跡する方法

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 の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • JS 非同期スタック トレース: await が Promise よりも優れている理由
  • JSPからArthasまでのJava動的トレース技術の研究
  • JS/HTML5ゲームでよく使われるトラッキングアルゴリズムの例の詳細な説明
  • VueJSデータ駆動型および依存関係追跡分析の詳細な説明
  • JavaScript のエラー処理とスタック トレースの説明
  • Raygun を使用して AngularJS で例外を自動的に追跡する
  • ウェブページでの自動クリックスルーを実現する JS スクリプト
  • JSスクリプト言語に基づく基本構文の詳細な説明
  • シンプルな投票システムを書くための js スクリプト

<<:  Linux プロセスの CPU 使用率が 700% に達し、終了できない場合の解決策

>>:  MySQL 5.7 のルートパスワードログイン問題の解決策

推薦する

VMware CentOS 仮想マシンのインストールとネットワーク構成のグラフィックチュートリアル

1. CentOSイメージをダウンロードする1.1 ダウンロードウェブサイトhttp://mirro...

Nodejs エラー処理プロセス記録

この記事では、接続エラー ECONNREFUSED を例に、Node.js がエラーを処理するプロセ...

LinuxのCentos7でmysql5.7.29を構築する詳細なプロセス

1. MySQLをダウンロードする1.1 ダウンロードアドレスhttps://downloads.m...

MySQL データ挿入効率の比較

データを挿入するとき、以前オフィス システムに取り組んでいたときにはデータベースのパフォーマンスにつ...

FileZilla Server の FTP サーバー構成と 425 エラーおよび TLS 警告の解決策の詳細な説明

123WORDPRESS.COM では、FileZilla のダウンロード リンクを提供しています:...

JavaScript 組み込みオブジェクトの概要

目次1. 組み込みオブジェクト2. 数学オブジェクト1. Mathオブジェクトの使用2. 指定された...

RGBAアルファ透明度変換計算表

IEでのRGBAとフィルター値の変換RGBA 透明度値IE フィルター値0.1 19 0.2 33 ...

MySql Group Byは複数のフィールドのグループ化を実装します

日常の開発タスクでは、データ テーブル内のグループ化フィールドに基づいて統計データを取得するために、...

JavaScript ECharts の使用方法の説明

以前、プロジェクトを行う際に ECharts を使用しました。今日はそれをメモとして整理し、より多く...

html-webpack-plugin の使用方法の詳細な説明

最近、React プロジェクトで初めてhtml-webapck-pluginプラグインを使用しました...

ドロップダウンボックス選択コンポーネントを実装するためのネイティブ js

この記事の例では、ドロップダウンボックス選択コンポーネントを実装するためのjsの具体的なコードを参考...

CSSアニメーションとSVGを組み合わせてエネルギーの流れの効果を作成する

最終的な効果は次のようになります。アニメーションは2つのステップに分かれていますランニング軌道を開発...

MySQL 学習: 初心者のための 3 つのパラダイム

目次1. パラダイム基盤1.1 パラダイムの概念2. 3つの主要なパラダイム2.1 3つの主要なパラ...

MySql でリモート接続を許可する方法

MySql でリモート接続を許可する方法この目標を達成するには、2つのことを行う必要がある。ユーザー...

【HTML要素】タグテキストの詳細説明

1. 基本的なテキスト要素を使用してコンテンツをマークアップするまず表示効果を見てみましょう:対応す...