2011-12-12 33 views
7

Tôi đang theo dõi Tải nút bấm trên một trang web có tính năng một dự án của tôi với mã này:theo dõi một nút tải về nhấp chuột với Analytics sử dụng các sự kiện

function trackDownload(link) { 
    try { 
     _gaq.push(['_trackEvent', 'Downloads', 'Click', 'Setup executable']); 
     setTimeout('document.location = "' + link.href + '"', 100); 
    } catch (err) {} 
    return false; 
} 

Và nút là một cái gì đó như:

<a href="files/setup.exe" onclick="return trackDownload(this);">Download</a> 

Vì vậy, khi người dùng nhấp vào, sự kiện sẽ được chuyển đến Analytics và sau đó người dùng được chuyển hướng đến tệp.

Điều này cũng có thể áp dụng trên theo dõi liên kết bên ngoài, không có sự khác biệt.

Và bây giờ là câu hỏi của tôi. Tôi có thể chắc chắn rằng sự kiện Analytics được "xử lý" trước khi người dùng chuyển hướng không? Nếu không, chuyển hướng đó gây ra sự kiện bị mất? Hiện tại các sự kiện đang được theo dõi, nhưng tôi không thể chắc chắn rằng tất cả trong số đó là.

tôi đọc tôi cũng có thể thử một cái gì đó một chút khác nhau, đẩy chức năng chuyển hướng vào hàng đợi Analytics:

_gaq.push(function() { document.location = link.href; }); 

Nhưng nó không phải là rõ ràng nếu làm việc này hoặc nếu nó chỉ tương đương với trước đó. Trên thực tế, here người ta nói rằng "calls to _gaq.push [...] thực hiện các lệnh khi chúng được đẩy".

Trả lời

7

Bạn chính xác ở chỗ bạn có thể push functions onto the analytics queue. Kể từ khi các chức năng hoặc các sự kiện theo dõi được thực hiện/đánh giá theo thứ tự mà bạn đã đẩy họ vào mảng, bạn sẽ có thể để làm điều này:

function trackDownload(link) { 
    _gaq.push(['_trackEvent', 'Downloads', 'Click', 'Setup executable']); 
    _gaq.push(function() { document.location = link.href }); 
    return false; 
} 

Lưu ý rằng try/catch là không cần thiết vì push() isn' t tài liệu để ném bất cứ điều gì (và tôi khuyên bạn nên loại bỏ nó kể từ khi khối catch rỗng có thể mask other problems).

Bạn hỏi:

Nhưng nó không phải là rõ ràng nếu làm việc này hoặc nếu nó chỉ tương đương với trước đó.

Trong ví dụ đầu tiên của bạn (push, setTimeout), sự kiện này sẽ bị mất nếu Analytics chưa tải xong khi bạn thực hiện chuyển hướng (vì tại thời điểm đó, _gaq chỉ là một mảng). Trong phiên bản với push(function..., sự kiện sẽ được ghi lại trước khi chuyển hướng bất kể Analytics đã tải xong vào thời điểm người dùng truy cập nút tải xuống hay chưa. Vì lý do này, tôi khuyên bạn nên sử dụng push(function....

Được cảnh báo rằng phiên bản push(function... sẽ đợi phân tích hoàn tất tải trước khi chuyển hướng xảy ra (có vẻ như bạn muốn), nhưng bạn có thể muốn thêm cách xử lý trường hợp phân tích không tải.

+0

Có lẽ tôi có thể đẩy chuyển hướng trong '_gaq' như tôi đã đăng, và sau đó lặp lại nó trong khối' catch' và trong một 'setTimeout' bị trễ hơn (một hoặc hai giây). Vì vậy, nếu xảy ra sự cố với '_gaq', tôi có thể chắc chắn rằng người dùng sẽ sớm được chuyển hướng. –

+0

Tôi đồng ý rằng setTimeout bị trì hoãn là cách xử lý trường hợp không phân tích.Tuy nhiên, tôi nghĩ rằng một hoặc hai giây có lẽ là một chút nhanh chóng. Ngoài ra, tôi chỉ nhận thấy rằng khối catch là không cần thiết - Tôi sẽ cập nhật câu trả lời của tôi. –

+0

Trong thực tế, tôi không nhớ tại sao tôi đặt khối 'try..catch' đó :) Về thời gian chờ: Tôi có thể đặt một thời gian dài hơn (5 giây) và một spinner trên nút khi được nhấp. Vì vậy, người dùng nhanh hơn sẽ không có cảm giác rằng không có gì đang xảy ra ... –

Các vấn đề liên quan