为什么Chrome中的mailto链接与POST请求冲突?

时间:2011-05-03 13:32:42

标签: javascript ajax google-chrome jquery

我不完全确定问题是否正确,但情况就是这样。 我有一个带有两个POST请求的网页,这些请求已经打开了一段时间(不会立即回复),而我可以在页面上做其他事情。我在页面上也有一个mailto链接。出于某些原因,在Chrome中,当我点击该链接时,这两个请求会立即返回错误。我还注意到Chrome中的控制台将mailto链接显示为GET请求事件(单击时)。这里发生了什么?即使Chrome将mailto链接视为请求,为什么它会与页面上的任何其他请求冲突?

在Firefox中,mailto链接对请求没有任何影响,它们只是继续工作并等待服务器响应。此外,链接本身似乎不是任何类型的请求。顺便说一句,mailto打开了一个Outlook消息窗口(该部分在Chrome中工作正常,只是请求失败)。

另外,以防万一,我正在使用jQuery $ .ajax来发起请求。

有人指出,也许Chrome会像常规一样处理mailto链接,至少部分是这样,因此会产生一些副作用。那么问题就变成了如何将mailto链接与页面上的请求相结合?我无法用表单替换链接。

5 个答案:

答案 0 :(得分:7)

我最近遇到过这个问题。这实际上发生在mailto:或Chrome中的任何其他应用URI。我使用的解决方案是在iframe中加载URL:

$('body').append('<iframe id="mailto-launcher"></iframe>');
$('#mailto-launcher').get(0).contentWindow.location.href = 'mailto:?subject=test';

你也可以设置iframe的样式,以便它在页面上呈现(使用绝对定位等)。这将启动邮件客户端,并仍然保持文档的AJAX请求。

答案 1 :(得分:1)

Google Analytics支持建议捕获链接点击,向GA发送请求,等待100毫秒,然后更新URL。 100ms应该足以跟踪请求完成。 https://support.google.com/analytics/answer/1136920?hl=en

示例很笨重,以下是一个自动处理所有链接的修改版本(也是使用javascript /使用AJAX加载的链接):

<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script>
  function trackOutboundLink(event){
    var url = event.currentTarget.href;
    try {
      _gaq.push(['_trackEvent', 'Outbound Links' , url]);
    } catch(err){}

    setTimeout(function() {
      document.location.href = url;
    }, 100);

    return false;
  }

  $(document).on('click', 'a[href]', trackOutboundLink);
</script>

答案 2 :(得分:0)

不确定,但Chrome可能会将mailto个链接视为导航到新页面。

有它的所有副作用,但没有真正的效果(比如重新加载页面。)

答案 3 :(得分:0)

此问题阻止我在点击电子邮件链接时向Google Analytics发送事件。

作为一种解决方法,我更改了mailto的目标:链接到_blank。这会导致浏览器在打开Mail.app之前打开一个空选项卡,但GA集成现在可以正常工作。

答案 4 :(得分:0)

同样在这里,对mixpanel的POST被取消了。我们的解决方法是使用1秒的setTimeout调用mailto:link,它工作得很好。不好,很难,但是周五晚上10点在办公室听起来很不错:)。

相关问题