【问题标题】:detecting when mailto failed检测mailto何时失败
【发布时间】:2011-11-05 02:15:06
【问题描述】:

当使用 mailto 链接时,如果用户没有设置电子邮件客户端,或者没有将他的 webmail 设置为默认客户端(例如gmail as default client in macosx),它不会为用户做任何事情. 优雅地提供回退的最佳方式是什么,请用户手动向您发送电子邮件? 单击链接后,我可以使用 JS 或 css 显示消息:

提交成功,如果没有任何反应,请手动发送电子邮件给我们。

如果使用带有 mailto 的表单,我可以在没有或使用服务器端脚本的情况下成功使用重定向页面吗?有没有办法从失败中过滤成功,而不是依赖用户的判断,上面的双重成功/失败消息?

edit:至少当单击 mailto 链接(或表单)时更改状态的最合适方式是什么。显然 JavaScript 或 css 是选项,但我不能简单地创建一个双动作链接或表单提交; mailto 并链接到另一个页面(您已提交/单击按钮')

【问题讨论】:

  • mailto: 很糟糕——相信我,没有人喜欢无缘无故打开电子邮件客户端。改用服务器端表单:)。
  • 您无法判断“mailto:”链接是否对用户“有效”。
  • @xfix 因为这是关于 SO re 的 1/2 问题。 mailto 加载失败,让我为您解决这个问题:没有人喜欢无缘无故打开未使用的桌面电子邮件客户端。自 11 年以来,我们已经取得了长足的进步:webintents.org/faq.html -- 不幸的是,据我所知……这条漫长的道路不包括失败事件……
  • 服务器端表单并不理想,因为它们可能被滥用。我们所做的是打开 mailto,并显示一个带有 gmail 链接的对话框。不理想,但似乎是最好的妥协。 (这是一个邀请按钮)。

标签: javascript css forms mailto server-side


【解决方案1】:

This article 讨论了在单击 mailto 后检查 window 的模糊事件是否触发的技巧。它使用超时,所以它不是万无一失的,但可以解决大多数情况。

(function($)) {
  $('a[href^=mailto]').each(function() {
    var href = $(this).attr('href');
    $(this).click(function() {
      var t;
      var self = $(this);

      $(window).blur(function() {
        // The browser apparently responded, so stop the timeout.
        clearTimeout(t);
      });

      t = setTimeout(function() {
        // The browser did not respond after 500ms, so open an alternative URL.
        document.location.href = '...';
      }, 500);
    });
  });
})(jQuery);

【讨论】:

    【解决方案2】:

    使用 JavaScript confirm popup 询问用户计算机上是否设置了电子邮件。

    【讨论】:

    • 如果 mailto 是表单中的操作形式,则只是一个复选框。猜猜这是一个 UI 决定,决定您何时想打扰用户思考它,在点击之前或之后......
    • 是的,我已经设置了电子邮件,我只需在浏览器中输入 gmail……不要以为用户会理解这个问题(don't 推荐 W3Schools 作为参考)
    • 另一种方法是在链接旁边提供一个可读、可复制的电子邮件地址; stackoverflow.com/questions/6028471/…
    【解决方案3】:

    您无法检测用户是否设置了电子邮件客户端。因此,我建议您设置一个服务器端表单,以便用户与您联系。

    在此下方或上方,您可以向用户提供一个链接,说明如果他想通过他的主要电子邮件帐户直接与您联系,他可以单击此链接(此链接为mailto: 链接)。

    通过向他提供两种与您联系的方式(网络表单或电子邮件客户端),您可以让用户有机会选择他想要使用的一种。因此,他是否安装了电子邮件客户端以及是否要使用它取决于他。

    【讨论】:

    • 我有充分的理由想要使用 mailto 链接,并且熟悉联系表单的最佳做法。我更感兴趣的是点击后获得状态变化(见编辑问题)
    猜你喜欢
    • 2013-03-15
    • 2018-07-16
    • 2016-02-07
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    相关资源
    最近更新 更多