0

我们有一个发布到母公司网站的预订表格。因为这是一个不同的域,我们需要实现 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 在警报中显示后是正确的,但如果我不发出警报则不正确。

4

2 回答 2

0

我尝试了一个简单的 HTML 页面,它调用 _gaqPush 并立即提交。这也失败了。添加 1000 毫秒的延迟(在大多数情况下)是有效的,所以我怀疑警报只是给了 GA 脚本时间来修改表单。

我正在关闭/接受这一点,因为在 GA 电话会议后提交表单的速度似乎太快了。

于 2012-06-28T15:11:03.893 回答
0

为后人解答。

问题是 _qaq(Google Analytics 队列)在调用 submit() 表单之前没有时间修改表单。

解决方案是将函数推送到提交表单的 _gaq 对象上,以便在表单修改完成后直接发生。

function postBookingForm() {
    var thisForm = document.getElementById('PostForm');
    _gaq.push(['_linkByPost', thisForm]);
    _gaq.push(function() { thisForm.submit(); });
}
于 2013-03-19T16:42:15.010 回答