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

Posted

技术标签:

【中文标题】Chrome - 点击 mailto: 链接关闭 websocket 连接【英文标题】:Chrome - clicking mailto: links closes websocket connection 【发布时间】:2015-03-21 18:05:06 【问题描述】:

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

谢谢

【问题讨论】:

在最新版本的 Chrome 中可见。我为它打开了一个错误:bugs.chromium.org/p/chromium/issues/detail?id=614693 【参考方案1】:

无论出于何种原因,当您单击同一页面上的 mailto: 链接时,Chrome 和 Firefox 将终止所有打开的 websocket(可能还有任何活动的 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;
);

【讨论】:

以上是关于Chrome - 点击 mailto: 链接关闭 websocket 连接的主要内容,如果未能解决你的问题,请参考以下文章

Mailto 链接在 Chrome 中没有任何作用,但在 Firefox 中有效?

mailto 链接在 chrome 扩展弹出窗口中不起作用

如果不了解“PHP编码”,您会建议使用“mailto”方式吗? [关闭]

mailto

使用 JQuery / JavaScript 调用/单击 mailto 链接

在新选项卡/窗口中打开 href mailto 链接