我不完全确定问题是否正确,但情况就是这样。 我有一个带有两个POST请求的网页,这些请求已经打开了一段时间(不会立即回复),而我可以在页面上做其他事情。我在页面上也有一个mailto链接。出于某些原因,在Chrome中,当我点击该链接时,这两个请求会立即返回错误。我还注意到Chrome中的控制台将mailto链接显示为GET请求事件(单击时)。这里发生了什么?即使Chrome将mailto链接视为请求,为什么它会与页面上的任何其他请求冲突?
在Firefox中,mailto链接对请求没有任何影响,它们只是继续工作并等待服务器响应。此外,链接本身似乎不是任何类型的请求。顺便说一句,mailto打开了一个Outlook消息窗口(该部分在Chrome中工作正常,只是请求失败)。
另外,以防万一,我正在使用jQuery $ .ajax来发起请求。
有人指出,也许Chrome会像常规一样处理mailto链接,至少部分是这样,因此会产生一些副作用。那么问题就变成了如何将mailto链接与页面上的请求相结合?我无法用表单替换链接。
答案 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点在办公室听起来很不错:)。