【问题标题】:New Window not Opening when using target="_blank" with onclick使用带有 onclick 的 target="_blank" 时未打开新窗口
【发布时间】:2012-04-20 09:17:21
【问题描述】:

总结: 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>

...或者如果它只是在同一个锚标记中使用 target 和 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?

【问题讨论】:

    标签: javascript html onclick analytics


    【解决方案1】:

    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

    【讨论】:

    • 注释掉并删除 return false 工作!现在我需要看看注释掉 setTimeout 会有什么影响(这个函数在所有地方都会被调用,所以我可能需要为这个调查按钮创建一个特定的函数)。
    • 我还创建了一个单独的函数(recordOutboundLinkOpenWindow),并将 setTimeout 更改为将 document.location 替换为 window.open,而不是将整行注释掉。这是完美的工作。谢谢!希望我有 15 名声望,这样我就可以提高你的回应!
    猜你喜欢
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 2011-03-28
    • 2015-01-16
    • 1970-01-01
    • 2013-09-17
    • 2013-01-13
    • 2017-07-25
    相关资源
    最近更新 更多