这里的技巧不在于“跟踪像素”,而在于填充参数的值。
您将在这里遇到的问题是您现在必须构建一个指向 .js 文件的字符串,然后将参数和值构建为字符串,将它们全部连接起来,构建一个脚本标签和将 url 指向您构建的值,因此丑陋的(按 JS-purist 标准)解决方案可能如下所示:
<form id="ContactForm">
<input name="first-name">
<input name="last-name">
<button id="my-button" type="submit">sign up</button>
</form>
<script>
// the button you want to listen to
var button = document.getElementById("my-button"),
// assuming your form has the id "ContactForm"
contact = window.ContactForm,
// create a <script> tag, like the one that's hard-coded now
script = document.createElement("script"),
// find whatever element contains the first <script> on the page -- usually <head> or <body>
parent = document.getElementsByTagName("script")[0],
// as much of the tracking URL that you know will NEVER change
url = "//analytics.tag.com/event/tracking.js?mt_id=123456&mt_adid=123abc";
button.onclick = function () {
var full_url = "",
v1,
v2;
v1 = contact["first-name"];
v2 = contact["last-name"];
full_url = url + "&v1=" + v1 + "&v2=" + v2;
script.src = full_url;
parent.appendChild(script);
};
</script>
单击按钮时,将从表单中收集值,将它们添加到 URL 中,并将脚本添加到页面中。
这是下一个问题:
如果这是 a 并且您正在捕获将您带到下一页的点击,默认情况下,您必须取消表单提交,否则,对 JS 文件的请求将被忽略(为什么要加载新的东西当您告诉浏览器您要转到下一页时?)。
因此,您需要将其修改为button.onclick
:
button.onclick = function (e) {
// IE < 9 supports "window.event", instead of an event-object as a parameter
e = e || window.event;
if (e.preventDefault) {
e.preventDefault();
e.stopPropagation();
} else {
// IE < 9
e.cancelBubble = true;
e.returnValue = false;
}
/* DO ALL OF YOUR DATA-COLLECTION AND STRING-BUILDING HERE
ie: most of the first version of this function (all before `script.src =...`)
*/
// after the script loads, fire contact.submit
script.onload = contact.submit;
// if the script errors out (404/etc) fire contact.submit
script.onerror = contact.submit;
// GhettoIE fix, for when scripts don't support "onload"
script.onreadystatechange = function () {
if (script.readyState === 4) { contact.submit(); }
};
/* SET THE SCRIPT URL HERE */
script.src = full_url;
parent.appendChild(script);
};
现在,当您单击按钮时,它将阻止表单提交(将您带到下一页),直到您收集所有表单值,将它们填充到脚本的 URL 中,将脚本放在页面上,然后等待服务器获取请求并响应。
这是以非常非常丑陋的跨浏览器 (IE6+/Safari3+) 兼容格式完成的。
如果你那里有一个像样的 JS 人,让他做得比这更好,否则我会哭...
如果您需要在下一页收集数据(例如,您需要在服务器处理付款后计算您的实际销售利润),您最好使用服务器的语言进行此操作:
// php
"<script src=\"....?v1=$profit&v2=$product_id\"></script>";
希望有帮助。