【问题标题】:Open external link in new window and track outbound click event在新窗口中打开外部链接并跟踪出站点击事件
【发布时间】:2013-02-13 19:41:16
【问题描述】:

我正在使用下面的代码来跟踪谷歌分析中的出站链接(在这个网站的某个地方找到它)。我有 2 个问题:

  1. 有时,输出的 e.currentTarget.host 部分会显示我自己的域 - 而不是显示单击所指向的域。知道为什么我的域名偶尔会出现吗?
  2. 是否可以修改此代码以执行以下操作(1)强制链接在新窗口中打开和(2)跟踪出站点击事件,如图所示。

    $(function() {
    $("a").on('click',function(e){
        var url = $(this).attr("href");
        if (e.currentTarget.host != window.location.host) {
            _gat._getTrackerByName()._trackEvent("Outbound Links", e.currentTarget.host, url, 0);
            if (e.metaKey || e.ctrlKey) {
                var newtab = true;
            }
            if (!newtab) {
                e.preventDefault();
                setTimeout('document.location = "' + url + '"', 100);
            }
        }
    });
    

    });

【问题讨论】:

    标签: jquery google-analytics


    【解决方案1】:
    1. 代码将链接中的域与窗口域进行比较:e.currentTarget.host != window.location.host -- 如果您的域有 www 前缀(如 www.domain.com)但有一些链接没有它(如 domain.com/link.html),他们会被视为外部链接。
    2. 原始代码在设置 document.location 之前使用延迟来为 _trackEvent 的跟踪请求留出时间。由于您希望所有站外链接都在新窗口中打开,因此可以消除延迟。

    无论任何 www 或子域前缀如何,以下代码都应该可以工作:

    jQuery(function($) {
      $('a[href^="http://"],a[href^="https://"]')
        .not('[href*="mydomain.com"]')
        .click(function(e) {
          var url = this.href;
          _gat._getTrackerByName()._trackEvent("Outbound Links", e.currentTarget.host, url, 0);
          e.preventDefault();
          window.open(url);
        })
    });
    
    • $('a[href^="http://"],a[href^="https://"]') -- 选择以http://https:// 开头的链接。这应该包括所有出站链接。
    • .not('[href*="mydomain.com"]') -- 丢弃所有包含mydomain.com 的链接,以防万一有任何以http:// 开头的内部链接...
    • e.preventDefault(); -- 阻止链接被正常关注。

    此外,如果您使用的是当前的异步 Google Analytics(分析)代码,您可以将 _trackEvent 调用缩短为

    _gaq.push(['_trackEvent', 'Booking', "Outbound Links", e.currentTarget.host, url, 0]);
    

    【讨论】:

    • 迈克 - 我想你找到了问题所在。我的网站主要是 .mydoamin.com。我怀疑 www.mydomain.com 有一些落后者。是否可以配置代码以考虑这两种情况(甚至任何子域?) - 这意味着子域也将被视为外部链接。最后,我假设在新窗口中打开链接,不需要实现 setTimeout?
    • @user2022284 -- 更正由于在新窗口中打开而不需要 setTimeout 延迟。
    • 您如何看待下面链接上的评论,即在这种情况下硬编码域名不是很好?想知道您对此有何看法:(请参阅博客文章中的最后一段 paulrhayes.com/2009-03/…)thxxx
    • 当前代码在另一个窗口中打开外部链接,但也在同一个窗口中!
    • 澄清一下,带有 target="_blank" 属性的链接可以正常工作。没有它的其他链接(大多数)是在同一个窗口和另一个窗口中打开的。
    【解决方案2】:
    1. 通过使用您编写的代码,您网站的所有<a> 元素都会受到影响。这显然应该包括一些指向您自己网站的链接,除非您的网站没有菜单,我相信它显然有。
    2. 也许您可以在加载页面后使用 jQuery 为所有链接添加target="_blank" 属性。

    【讨论】:

      猜你喜欢
      • 2013-10-09
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多