1

私は、訪問者のIPを追跡するために使用しようとしているいくつかのコードと、それらがサイトに滞在している期間を書きました。コード:

<script>
var startTime = new Date();
window.onbeforeunload = $(function() {
    /* var ip = (window.location != window.parent.location) ? document.referrer: document.location; */
    /* var ip = "192.168.1.1"; */
    var endTime = new Date();        //Get the current time.
    var timeSpent = (endTime - startTime);        //Find out how long it's been.
    var ip = (window.location != window.parent.location) ? document.referrer: document.location; 
    $(window).load(function(event) {
         $.post('ajax.php', {ip: ip, timeSpent: timeSpent});
    });            
});
</script>

私が得られないのは、ユーザーがこのスクリプトを実行する前にサイトを離れようとするまで待たない理由です。

これを実行するまで待機させるのを手伝ってくれる人はいますか? ありがとうございました!

4

2 に答える 2

6

私が見ることができるこのコードにはいくつかの問題があります。

まず、 の$(function(){})省略形です$(document).ready(function(){})。これは、DOM の準備ができたときに関数を実行し、jQuery オブジェクト ( $(document)) を返すことを意味します。

第二に、$(window).load(function(){})必要ありません。ユーザーがページを離れるとき、DOM は既に読み込まれていると思います。

第 3 に、window.onbeforeunload(and window.onunload) はAJAX 呼び出しが完了するまで待機しません。使用async:falseして待機させることができます (すべてのブラウザーで機能するとは限りません)。

$.ajax({
    url: 'ajax.php',
    data: {ip: ip, timeSpent: timeSpent},
    async: false
});

(注:window.onbeforeunloadすべてのブラウザーで動作するわけではありません。Opera では起動しないことはわかっています。)

また、window.onbeforeunloadユーザーにページを離れたいかどうかを尋ねるためにも使用されます。ユーザーに表示されるイベントから文字列を返す場合 (Firefox を除く)。

ユーザーがページを離れたときに AJAX 呼び出しを送信する場合は、window.onunload代わりに使用することをお勧めします。

(function(){  // Anonymous function so startTime isn't global
    var startTime = new Date();
    window.onunload = function() { // set to a function
        var endTime = new Date();  //Get the current time.
        var timeSpent = (endTime - startTime);  //Find out how long it's been.
        var ip = (window.location != window.parent.location) ? document.referrer: document.location; 
        $.ajax({
            url: 'ajax.php',
            data: {ip: ip, timeSpent: timeSpent},
            async: false
        });
    };
}());
于 2013-03-12T20:59:14.813 に答える
1

あなたはこのすべてから素晴らしい混乱を作りました。あなたに必要なのは:

var startTime = new Date();
window.onbeforeunload = function() {
    var endTime = new Date();        //Get the current time.
    var timeSpent = (endTime - startTime);        //Find out how long it's been.
    var ip = (window.location != window.parent.location) ? document.referrer: document.location; 
    $.post('ajax.php', {ip: ip, timeSpent: timeSpent});
};
于 2013-03-12T20:57:14.787 に答える