我们有一个发布到母公司网站的预订表格。因为这是一个不同的域,我们需要实现 GA _linkByPost 以跨域传递 GA 跟踪 cookie 信息。
由于预订表单位于 .NET 用户控件中,因此它会进行回发。在回发时,我们验证、包装预订信息,并将包含目标预订引擎所需的隐藏元素的表单写回客户端,并添加一行 javascript 以提交表单。
下面是我用来提交表单的 javascript 函数:
function postBookingForm() {
var thisForm = document.getElementById('PostForm');
_gaq.push(['_linkByPost', thisForm]);
thisForm.submit();
}
以及相关的表格信息:
<form id="PostForm" name="PostForm" action="ClientBookingEngineUrl" method="post" >
booking form info in here
</form>
结果是我们填写了表单,点击提交,它会往返于服务器生成一个新表单并发布信息。除了 URL 丢失了查询字符串中的 GA cookie 信息之外,这一切都很好。如果我注释掉表单提交行并查看源代码,我可以在查询字符串上看到 GA cookie 信息 - 但是在发布时,我看不到查询字符串(使用 Fiddler)。
澄清一下:上述技术有效,并且在将表单数据发布到预订引擎并将用户带到那里方面做了我们想要的。如果提交行被注释掉,您可以看到带有修改后的操作的表单,其中附加了 GA 内容(使用 Firebug)。如果表单使用提交行提交,则查询字符串信息将被删除(由 Fiddler 确认)。
我错过了一些明显的东西吗?是否有一些关于 JS 提交、表单 POST 和查询字符串的问题?还是我缺少一个简单的技巧?
干杯
编辑 1
发生了一件怪事。
如果我在 _gaqPush 之前和之后提醒表单操作,那么我们可以看到 URL 处于之前和之后的状态,并且符合预期。
alert('1 form action = ' + thisForm.action);
_gaq.push(['_linkByPost', thisForm]);
alert('2 form action = ' + thisForm.action);
警报 1 显示预先修改的操作,警报 2 显示带有 GA 信息的操作。有了警报,它会在查询字符串中提交 GA 信息。如果我注释掉警报,则 GA 信息不在查询字符串中......
我开始认为表格或其他东西还没有准备好,所以我正在尝试准备好 JQuery 的文档。
编辑 2
将方法调用包装在 document ready 中并没有帮助。我很困惑为什么动作 URL 在警报中显示后是正确的,但如果我不发出警报则不正确。