我正在尝试跟踪点击Google Analytics的所有链接作为事件。所以我写了一些jQuery来捕获它。我刚刚开始使用jQuery,所以我不知道我是否采用最有效的方式,所以我想要一些关于如何改进代码的反馈或建议。它越简单越快越好,因为它跟踪分析。
编辑:这是最新的代码。我无法弄清楚为什么最后一个按钮和倒数第三个返回未定义的值。 http://jsfiddle.net/uqj88/
这是我到目前为止的代码:
$(document).ready( function() {
var pageURL = window.location.pathname;
var linkText;
$('a').click(function (e) {
if ($(this).text() != ""){
linkText = $(this).text();
}
else if (($(this).text() === "") && ($(this).children("img") != "") && ($(this).children("img").attr("alt") != "")) {
linkText = $(this).children("img").attr("alt");
}
else if (($(this).text() === "") && ($(this).children("img") != "") && ($(this).children("img").attr("alt") === "")) {
linkText = $(this).children("img").attr("src").split("/").pop();
}
_gaq.push(['_trackEvent', pageURL, 'click', linkText]);
if (($(this).attr('target') != '_blank') || ($(this).attr('target') != '#')) {
e.preventDefault();
setTimeout('document.location = "' + $(this).attr('href') + '"', 150);
}
});
$('button').click(function () {
linkText = $(this).text();
_gaq.push(['_trackEvent', pageURL, 'click', linkText]);
});
$("input[type='submit']").click(function () {
if ($(this).attr("value") != ""){
linkText = $(this).attr("value");
}
else if (($(this).attr("value") === "") && ($(this).prop("id") != "")) {
linkText = $(this).prop("id");
}
else if (($(this).attr("value") === "") && ($(this).prop("class") != "")) {
linkText = $(this).prop("class");
}
else {
linkText = "button";
}
_gaq.push(['_trackEvent', pageURL, 'click', linkText]);
});
});
答案 0 :(得分:2)
只是一个可以为您节省一些分析问题的FYI ...... _trackPageview
和_trackEvent
通过向Google请求跟踪像素来工作。如果您在请求有机会完成之前离开页面,您最终会得到不一致的数据。根据您无法控制的一些事情,该事件可能会或可能不会被计算在内。
处理此问题的一种方法是,如果链接未在新窗口中打开,请将链接延迟少量(本例中为150毫秒)。
$('a').click(function (e) {
<snip>
_gaq.push(['_trackEvent', pageURL, 'click', linkText]);
if ($(this).attr('target') != '_blank') {
e.preventDefault();
setTimeout('document.location = "' + $(this).attr('href') + '"', 150);
}
});
答案 1 :(得分:1)
我修复了你的例子。我相信在较新版本的jQuery(如1.7+)中,建议您不要使用attr
方法。我使用prop
方法对其进行了测试,现在可以正常运行:http://jsfiddle.net/shanabus/uqj88/3/
另外,我知道这是示例代码,但在每次使用var
之前使用linkText
声明似乎很奇怪,我认为这会稍微扰乱变量的范围。
希望这有帮助!