使用onclick使用target =“_ blank”时,新窗口无法打开

时间:2012-04-06 20:22:51

标签: javascript html onclick analytics

要点: 1.需要打开一个新窗口以显示来自第三方的调查 2.无法使用JavaScript打开窗口(当前使用target =“_ blank”。 3.必须使用JavaScript来跟踪点击次数(目前使用onclick)。 4.原始窗口在点击时不得更改其内容。

我有一个JSP试图在新窗口中启动第三方调查。最初,代码启动了这样的新窗口:

<a id="customer_survey_button"  href="#" target="_blank" onclick="recordOutboundLink(this, 'Outbound Links', 'blah.com');openChildWindow('http://www.blah.com/f.asp?etcetera','TAKE SURVEY');return false;"  class="genbut">TAKE SURVEY</a>

它适用于FF,但不适用于Chrome。它导致Chrome出现安全问题。类似于'不安全的JavaScript尝试访问加载一个域的框架(新窗口),而它的来源是另一个域。我的解决方案是使用HTML打开窗口,如下所示:

<a id="customer_survey_button"  href="http://www.blah.com/f.asp?etcetera" target="_blank" onclick="recordOutboundLink(this, 'Outbound Links', 'blah.com');return false;"  class="genbut">Take Survey</a>

问题是,这不是在新窗口中打开。在调试过程中,我从上面的代码中删除了onclick,它在新窗口中打开。我不确定JS代码中是否有问题......

<script type="text/javascript">
<!--
var pageTracker = _gat._getTracker("<%=googleTrackerId%>");
pageTracker._initData();
pageTracker._trackPageview();

function recordOutboundLink(link, category, action) {
  try {    
    pageTracker._trackEvent(category, action);
    setTimeout('document.location = "' + link.href + '"', 100)
  }catch(err){}
}
// -->
</script>

...或者只是在同一个锚标签中使用目标和onclick的问题。有什么想法吗?

我在其他地方进行了研究,在Stack Overflow上,我发现了以下结果,但似乎都没有解决这种情况。例如:

这在某种程度上有所帮助,因为我能够测试删除“return false”。这与“user1223427”的结果相同 - 它在两个不同的窗口中呈现相同的页面。 它没有帮助,因为我需要一种非JavaScript方式来打开目标URL(由于提到的安全问题)。 OnClick for google analytics and target _blank. The link does not work?

这个没有帮助,因为我没有使用JQuery而且我不理解JQuery解决方案和我的情况之间的联系 select onclick that contains _blank

这仅适用于让跟踪代码生效,而不是新窗口打开的问题: Google Analytics - Download clicks tracking

我认为这个会有一个好的结果,但它的解决方案是一个JS。 Bug in external link tracking when opening the link in a new window in Google Analytics?

1 个答案:

答案 0 :(得分:4)

recordOutboundLink函数正在打开链接。

//This is changing the URL to the href of the link you clicked    
setTimeout('document.location = "' + link.href + '"', 100) 

你的第二个例子是从onclick事件返回false。这将阻止锚标记执行它的正常行为。

如果您注释掉setTimeout行,并从onclick中删除return false,您应该会看到链接的行为符合您的要求。

您还可以修改setTimeout函数以调用window.open而不是document.location