检测 mailto 的基于 Web 的邮件客户端与本地邮件客户端 link

Detecting web-based mail client vs local mail client for a mailto link

我有一个 Web 应用程序,用户可以从中使用 mailto link 发送电子邮件。基本上,我连接一个包含主题、正文和收件人的字符串,然后代码触发一个 mailto,有点像这样:

var MailToLink = 'mailto:' + TheEmailString;

window.open(MailToLink, '_blank'); //option 1
window.open(MailToLink); //option 2

最初,我只有选项 2,因为在我的开发机器上有 Outlook。但是当我开始一些 alpha 测试时,另一个用户正在使用 Gmail,并且 mailto link 将在与我的应用程序相同的 window 中打开,所以我将我的代码更改为选项 2,以便电子邮件在另一个 window 中打开=25=]。现在的问题是,当用户使用 Outlook 时,link 打开 Outlook 邮件和新的空白 window。

有没有办法检测用户使用的是基于网络的电子邮件客户端还是本地客户端?我想做这样的事情:

if (IsUsingWebMailClient) {

    window.open(MailToLink, '_blank');

} else {

    window.open(MailToLink);
}

我不确定这是否可能;如何使用 JavaScript 检测 mailto 客户端?

这有点 hack,但确实有效。超时时间可能会有所不同,您可以使用更多或更少的毫秒进行测试。

<html>
    <head>
        <script type="text/javascript">
            function mailTo(address){
                var windowRef = window.open('mailto:'+address, '_blank');
                var body = windowRef.document.getElementsByTagName('body')
                if(!body.lenth) setTimeout(windowRef.close,300)
            }
        </script>
    </head>
    <body>

    <input type="button" value="send email" onclick="mailTo('email@gmail.com')" >

    </body>
</html>