1

我使用以下链接通过谷歌分析记录出站链接。是否可以在新窗口中打开链接?

<script type="text/javascript">
function recordOutboundLink(link, category, action) 
{  
try {    
    var myTracker=_gat._getTrackerByName();    
    _gaq.push(['myTracker._trackEvent', category ,  action ]);    
    setTimeout('document.location = "' + link.href + '"', 100)  
 }
catch(err)
{
}
}
</script>

 <a href="http://www.example.com" onClick="recordOutboundLink(this, 'Outbound Links', 'example.com');return false;">
4

5 回答 5

5

编辑,我忘了添加 target="_blank":

我会这样做跟踪出站链接:

<a href="http://outgoinglink.com" target="_blank" onclick="_gaq.push(['_trackEvent','outgoing_links','outgoinglink.com'])">Link Text</a>
于 2012-04-22T22:09:22.263 回答
1

杰夫的回答非常接近为我解决这个问题。Google 推荐的代码会破坏 target = _blank,并且 window.open 策略会被弹出窗口拦截器捕获。我修改了目标的测试,如下所示:

if (!link.target || link.target.match(/^_(self|parent|top)$/i)){
    return false;
    setTimeout(function() { document.location = link.href }, 100);
} else {
    return true;
}
于 2013-10-30T04:08:12.753 回答
1

替换为document.location = url;,window.open(url)在新窗口中打开并同时跟踪。不需要修改链接,在onclick上调用JS函数即可。

于 2016-09-27T00:04:04.670 回答
0

这是您提供的链接中的修改片段,它既适用于在当前窗口中打开的链接,也适用于在新窗口中打开而无需任何修改的链接:

<script type="text/javascript">
// Records an event for an outbound link.  Supports links even if they open in a
// different window (target="_blank").
// Don't forget to return the return value of this function from the onclick handler.
// link - A reference to the <a> anchor object to which this call is attached
// parameters - Parameters to pass to the event, in an array:
//              category/action/label/value/noninteraction or some subset; see GA docs.
//              Pass "undefined" (the value, not the string) for unspecified optional params if necessary.
// Exmaple:
// <a href="http://www.google.com"
//    onclick="return recordOutboundLink(this, ['category', 'action', 'label', 6.6, false);">link</a>
function recordOutboundLink(link, parameters) {
    try {
        _gaq.push(['_trackEvent'].concat(parameters));
        if (link.target == '_blank') {
            return true;
        } else {
            setTimeout(function() { document.location = link.href }, 100);
            return false;
        }
    } catch (err) {
        return true;
    }
}
</script>

这是两种链接类型。请注意,两者的 onclick 处理程序是相同的:

<a href="http://www.example.com"
   onClick="return recordOutboundLink(this, ['Outbound Links', 'example.com']);">

<a href="http://www.example.com"
   target="_blank"
   onClick="return recordOutboundLink(this, ['Outbound Links', 'example.com']);">

限制

  • 如果浏览器忽略 'target="blank"' 而是在同一窗口中打开 URL(例如 Facebook iOS 应用程序中的 UIWebView),则链接可能不会被跟踪。ErikdR 接受的答案也是如此。您可以添加代码来检测这样的情况(例如通过 javascript 检测 ipad/iphone webview)。
  • 如果用户尝试按 ctrl-/shift-/cmd-click(即在新选项卡或窗口中打开)没有“target="blank"' 的链接,则 URL 将在现有窗口中打开而不是打开在新窗口中。Roslyn 的代码片段(以及 Google 的官方代码示例)也是如此。同样,您可以添加代码来处理这些特殊情况。
于 2012-09-07T12:20:28.367 回答
0

一般情况下

在更一般的情况下target,例如

  • 空字符串 -<a>元素的默认值。同义_self
  • _blank- URL 被加载到新窗口/标签中
  • _self- URL 替换当前页面。
  • _parent- URL 被加载到父框架中
  • _top- URL 替换任何可能加载的框架集
  • name - 窗口的名称

您可以修改该行

setTimeout('document.location = "' + link.href + '"', 100)

对此:

setTimeout('window.open("' + link.href + '", link.target == "" ? "_self" : link.target)', 100)

奇怪的是提供""towindow.open与提供相同_blank,因此额外的?:运算符是必要的。

顺便说一句:您提供的代码(以及官方 google 示例提供的代码)应稍作修改以使其正常工作,请参阅如何设置 Google Analytics 以跟踪出站链接?官方例子不行

于 2012-11-12T07:52:00.360 回答