首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >跨域iFrame - cookie不传输

跨域iFrame - cookie不传输
EN

Stack Overflow用户
提问于 2012-06-01 00:26:05
回答 1查看 2.3K关注 0票数 0

我们有一个网站,我们的应用程序在多个域和子域上的iFrame中运行。主网站(www.example.com)只有静态内容,链接到带有框架应用程序站点的站点。因此,sub.example.com、sub2.example.com、search.another.com使所有iFrame都与应用程序一起运行。

我们想用Google Analytics (GA)跟踪所有这些网站。子域跟踪工作得很好,但我找不到一种方法来让跨域准确工作。主要的问题是我不能在顶级域之间共享访问者cookie信息。因此,同一个访问者访问sub.example.com和search.another.com会得到两个不同的cookies,这会导致各种问题。(例如,访问者计数器膨胀,无法正确跟踪推荐信息等)

你能帮我解决这个问题吗?

(我已经在网络上做了相当彻底的搜索,尝试了几种方案,但到目前为止还没有成功)

以下是我们的GA实现的核心:

在sub.example.com (以及主网站的所有子域)上

代码语言:javascript
复制
_gaq.push(['b._setAccount', 'UA-XXX']);
_gaq.push(['b._setDomainName', 'example.com']);
_gaq.push(['b._setAllowLinker', true]);
_gaq.push(['b._addIgnoredRef', 'example.com']);
_gaq.push(['b._addIgnoredRef', 'search.another.com']);
_gaq.push(['b._trackPageview']);

在search.another.com上(所有外部子域都有变体)

代码语言:javascript
复制
_gaq.push(['b._setAccount', 'UA-XXX']);
_gaq.push(['b._setDomainName', 'search.another.com']);
_gaq.push(['b._setAllowLinker', true]);
_gaq.push(['b._addIgnoredRef', 'example.com']);
_gaq.push(['b._addIgnoredRef', 'search.another.com']);
_gaq.push(['b._trackPageview']);

在所有页面上的iframe之后

代码语言:javascript
复制
  <script type="text/javascript">
    _gaq.push(function ()
    {
      var iFrameTracker = _gat._getTrackerByName('b');
      var iframe = document.getElementById('myframe');
      iframe.src = iFrameTracker._getLinkerUrl(iframe.src);
    });
  </script>

关于www.example.com上的链接

代码语言:javascript
复制
<a href="http://search.another.com" onClick="_gaq.push(function ()
  {
    var tracker = _gat._getTrackerByName('b');
    var linkerUrl = tracker._getLinkerUrl('http://search.another.com');
  });">

cookie为www.example.com的linkerUrl具有正确的Url。但是出于某种奇怪的原因,GA在search.another.com上分配了一个新的cookie。我尝试将域名设置为none ('b._setDomainName','none'),但没有帮助。我不确定我是否遗漏了一个简单的基本点。我猜这个问题可能与跨域iFrames有关,链接可以在iFrame中,也可以在框架集中。所以我想同时追踪这两种情况。

我使用Chrome GA Debugger插件进行调试。

(顺便说一句,理论上我们可以有无限数量的顶级/子域。因此,手动为GA上的每个域创建过滤器不是一种选择。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-02 02:15:06

您只需将linkerUrl赋值给一个变量。您需要将用户重定向到该url。

您应该在onClick处理程序上返回false,以防止浏览器执行通常的重定向。

代码语言:javascript
复制
<a href="http://search.another.com" onClick="_gaq.push(function ()
  {
    var tracker = _gat._getTrackerByName('b');
    var linkerUrl = tracker._getLinkerUrl('http://search.another.com');
    window.location.href = linkerUrl;
  });return false;">

或者,您应该使用_link。它做的几乎是同样的事情。

代码语言:javascript
复制
<a href="http://search.another.com" 
   onClick="_gaq.push(['b._link', this.href]);return false;">
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10837546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档