Chrome - 点击mailto:links关闭websocket连接

时间:2015-03-21 18:05:07

标签: javascript html html5 google-chrome websocket

我使用的是最新的稳定版Chrome 41。我在页面上有一个打开的websocket连接和一个指向电子邮件地址的链接(mailto:***)。 当用户点击电子邮件地址时,websocket连接将关闭。 Firefox没有这个问题。 你知道怎么解决这个问题吗?

谢谢

1 个答案:

答案 0 :(得分:0)

无论出于何种原因,当您点击同一页面上的mailto:链接时,Chrome和Firefox都会终止所有打开的websockets(可能还有任何活动的XHR连接)。

为了解决这个问题,您可以劫持点击并致电window.open(hrefMailtoTarget)。这将使您的连接处于打开状态并启动用户的电子邮件客户端,但您现在已经注意到您现在有一个新的空白浏览器页面,因此您可以尝试window.open(hrefMailtoTarget).close(),这将立即关闭打开浏览器页面...但它不会打开电子邮件客户端。

所以要用jQuery全局修复所有电子邮件链接:

$(document).on('click', 'a[href^="mailto:"]', function (e) {
    e.preventDefault();
    var emailWindow = window.open($(e.currentTarget).attr('href'));

    setTimeout(function () {
        emailWindow.close();
    }, 500); // Is half a second long enough?
             // I don't know.
             // I'd set it as long as you can stand.

    return false;
});