这个问题发布已经有一段时间了,但我一直在研究一个简单的 JavaScript 模块来做到这一点。
它不使用图像,而是从用户指定的 HTML 元素中捕获事件数据以及有关站点访问者浏览器配置的一些基本信息。然后使用在 beforeunload 事件上触发的 XHR 将数据发送到指定的服务器端点。
这是link to the GitHub project 和example page
关于代码,下面是 HTML 的示例:
<!DOCTYPE html>
<html>
<head>
<title>Interaction Tracker Example</title>
</head>
<body>
<div class="someElement"></div>
<div class="someOtherElement"></div>
<div class="conversion"></div>
<script src="interactor.min.js" type="application/javascript"></script>
<script>
// An example instantiation with custom arguments
var interactions = new Interactor({
interactions : true,
interactionElement : "someElement someOtherElement",
interactionEvents : ["mousedown"],
conversions : true,
conversionElement : "conversion",
conversionEvents : ["mouseup"],
endpoint : '/usage/interactions',
async : true
});
</script>
</body>
</html>
该架构允许您通过多个实例轻松跟踪多个元素,允许您自定义发送不同交互的端点。这允许在将数据保存到数据库之前彻底分离任何服务器端预处理。
var elementsToTrack = [
{
element : "cssClass1",
events : ["mouseup", "touchend"],
endpoint : "/interactions/c1"
},
{
element : "cssClass2",
events : ["mouseup"],
endpoint : "/interactions/c2"
},
{
element : "cssClass3",
events : ["mouseup"],
endpoint : "/interactions/c3"
}
];
for (var i = 0; i < elementsToTrack.length; i++) {
var el = elementsToTrack[i];
new Interactor({
interactionElement : el.element,
interactionEvents : el.events,
endpoint : el.endpoint
});
}
最后,它非常轻量级(缩小了大约 5KB)并且可以轻松扩展以满足大多数需求。