analytics.js:跟踪放在另一个域的iframe中的网站

时间:2016-04-06 10:27:46

标签: javascript iframe cookies google-analytics

我们假设我有一个托管在app.com上的网站。我的网站是在platform.com托管的另一个网站上发布的。

<html class="platform.com">
    <body>
         <iframe src="app.com">
              //ga init code
              ga("create", "UA-0000000", {
                   storage: "none",
                   userId: options.userId,
                   clientId: options.userId
              });
         </iframe>
    </body>
</html>

问题是我可以看到请求发送到google-analytics.com/collect,但实际上没有数据提交给Google Analytics报告。

enter image description here

我在GA管理员中检查了过滤器,但没有。我认为这个问题与当前域和请求源域不匹配有关,但我无法弄清楚我实际可以做些什么来解决这个问题。

如您所知,我无法访问platform.com代码,我可以操作的只是iframe中的代码。

我使用了这些来源:

About GA cross-domain tracking

About GA cookies

2 个答案:

答案 0 :(得分:0)

如果您无法控制父级,则无法跟踪父级中的交互(您需要实现postmessage接口,这需要您将功能插入platform.com)。

然而,跟踪iframe内部的互动应该没有问题( nb 我相信GA代码实际上在框架页面的源代码中,而不是字面上粘贴在iframe标签之间)

同时使用cookieDomain.auto和storage:none设置是没有意义的,因为它们是互斥的(cookieDomain:auto告诉ga对象使用当前的“主”域作为cookie域,storage:none告诉不要使用像cookies一样的存储空间;无论如何,你发送自己的客户端ID并且不需要cookie。)

我建议使用ga调试器扩展程序(至少可用于chrome),还可以检查您的帐户是否有过滤器。如果出现错误,通常GA拒绝发送任何内容,因此接收端的问题可能非常好。

答案 1 :(得分:0)

https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#disabling_cookies

看起来您应该在父级上生成 clientId,通过 postMessage 将其发送到 iframe,并且您必须在 iframe 中添加:'storage': 'none',

所以它看起来像这样:

var clientId = 'RECEIVED_FROM_PARENT' ga('create', 'UA-XXXXXX-YY', 'auto', {
    'storage': 'none',
    'clientId': clientId
});