【问题标题】:Open the href mailto link in new tab / window在新选项卡/窗口中打开 href mailto 链接
【发布时间】:2012-01-22 21:41:09
【问题描述】:

我有一张图片,点击它时,我想链接到一个邮箱:

 <a id="mailto" href="mailto:hfms@live.com.my" target="_newtab" >
        <img src="@Url.Content("~/Content/HomePage/email.png")" alt="email" /></a>

然而,目前一旦点击它,它将启动电子邮件选项来选择一个 mailto 应用程序,一旦我选择,mailto 链接就会在当前选项卡中打开。这将导致用户离开应用程序。

所以,我希望发送电子邮件的页面(通过 gmail、yahoo 等)要么在新标签页中打开,要么在窗口中打开。知道怎么做吗?我尝试了 target="_newtab" 和 target="_blank" 但都没有工作。

任何帮助将不胜感激..谢谢...

(如果没有其他方法也可以使用jQuery方法,谢谢)

【问题讨论】:

  • “我希望 mailto 链接在新选项卡或窗口中打开” - 您希望在这个新选项卡或窗口中显示什么?请尽可能具体。
  • 发送邮件的页面,可以是gmail、yahoo等
  • 这是不可能的。对不起。

标签: jquery razor href target mailto


【解决方案1】:

可以确认 '_blank' 在 Firefox 中仍然不能用于 emailto 链接。而是使用将执行以下操作的 onClick 函数:

window.open('mailto:'+email+'?subject='+subject);

【讨论】:

    【解决方案2】:

    此信息已过时,我相信现在可以这样做,因为 gmail 和其他人现在可以通过浏览器链接工作。但是有一个问题,如果不是在系统邮件客户端中打开,您只希望它在新选项卡中打开,如果它是网络邮件客户端,则在新选项卡中打开,否则例如 Outlook 用户会看到一个空白选项卡出现,这令人迷惑,尤其是因为他们是 Outlook 用户。

    【讨论】:

    • 我的遮阳篷是基于你的帖子,我只是添加了代码。但你值得称赞。
    • 对“特别是因为他们是 Outlook 用户”这一行投了赞成票。
    【解决方案3】:

    变体 1 (JavaScript):

    <script>
    // Open mailto links in a new tab
    function mailto(email, subject, body) {
        var url;
        url = 'mailto:' + email;
        url += '?subject=' + subject;
        url += '&body=' + body;
        window.open(url);
    }
    </script>
    
    <a href="#" onclick="mailto('test@gmail.com', 'Subject', 'Body');event.preventDefault()">test@gmail.com</a>
    

    变体 2 (JavaScript):

    <script>
    // Open mailto links in a new tab
    function mailto(th) {
        var url = th.getAttribute('href');
        window.open(url);
    }
    </script>
    
    <a href="mailto:test@gmail.com?subject=Subject&body=Body" onclick="mailto(this);event.preventDefault()">test@gmail.com</a>
    

    变体 3 (jQuery):

    <script>
    // Open mailto links in a new tab
    $('#mailto').click(function (e) {
        e.preventDefault();
        var url = $(this).attr('href');
        window.open(url);
    });
    </script>
    
    <a href="mailto:test@gmail.com?subject=Subject&body=Body" id="mailto">test@gmail.com</a>
    

    变体 4 (jQuery):

    <script>
    // Open mailto links in a new tab
    $("a[href^='mailto:']").click(function(e) {
        e.preventDefault();
        var href = $(this).attr('href');
        var target = $(this).attr('target');
        window.open(href, target ? target : '_self');
    });
    </script>
    
    <a href="mailto:test@gmail.com?subject=Subject&body=Body" target="_blank">test@gmail.com</a>
    

    HTML 目标属性:https://www.w3schools.com/tags/att_a_target.asp

    【讨论】:

    • 内联处理程序是非常糟糕的做法 - 请考虑使用 Javascript 正确附加处理程序。
    • 我做了另一个选择
    【解决方案4】:

    我知道这是一个老问题,但如果找到的话,这个帖子有最好的答案。我在上面修改了 Marcos 的回答,如果客户端有外部邮件处理程序,也会关闭创建的空白选项卡

    reference answer

    JS(w\ jQuery 用于事件处理程序)

    $(document).on('click', 'a[href^=mailto]', function(e) {
      var checkClose, checkLoaded, event, href, i, len, loadEvents, results, t, wndw;
      e.preventDefault();
      href = this.href;
      wndw = window.open(href, 'mail');
      checkClose = function() {
        console.log('checkClose');
        try {
          wndw.location.href;
          return wndw.close();
        } catch (error) {
          return console.log('webmail');
        }
      };
      t = setTimeout(checkClose, 5000);
      try {
        checkLoaded = function() {
          console.log('loaded');
          clearTimeout(t);
          return t = setTimeout(checkClose, 2000);
        };
        wndw.onload = checkLoaded;
        loadEvents = ["DomContentLoaded", "load", "beforeunload", "unload"];
        results = [];
        for (i = 0, len = loadEvents.length; i < len; i++) {
          event = loadEvents[i];
          results.push(wndw.addEventListener(event, checkLoaded));
        }
        return results;
      } catch (error) {
        return checkLoaded();
      }
    });
    

    jsfiddle

    【讨论】:

    • 这在我的工作中用于生产,谷歌浏览器没有问题,我没有检查其他浏览器
    • 确认最新的火狐。我在linux上,所以无法测试IE
    • 感谢@Sampson-Crowley!我可以确认这适用于 IE (11) 和 Chrome (68)。默认情况下正确设置 Chrome 并使用帐户作为 Web 客户端打开。使用电子邮件客户端设置,它也可以正常工作。在某些情况下,我可能会得到一个空选项卡(无法重新创建),但它会按照代码的预期自动关闭。还在进入 Gmail 的 Android 中进行了测试。感谢分享!
    【解决方案5】:

    您是否尝试过“中键”(“在新标签中打开”)? 它对我有用

    (http://forums.mozillazine.org/viewtopic.php?f=7&t=1842595)

    虽然要求用户中键似乎特别奇怪

    无论如何,我找到了一个似乎在 FF 25/Chrome 35 中有效的伪解决方案

    1.- 设置您的链接,如下所示:

    <a href="javascript:void()"
     class="mailToLink" 
    data-mail="mailaddr@domain.com">mailaddr@domain.com </a>
    

    2.- 使用 javascript(在示例中使用 jquery)设置 onlclick 事件,如:

        $('.mailToLink').on('click', function(){
            mailto=$(this).data('mail');
            w=window.open('','_blank','',true);
            w.location.href='mailto:'+mailto;
            w.focus();
        });
    

    这会打开一个空白的新窗口/选项卡,然后会更改其位置,因此邮件协议处理程序在新窗口打开之前无法采取行动

    未使用本地邮件客户端(Outlook 等)进行测试

    【讨论】:

      【解决方案6】:

      此答案基于此答案Open the href mailto link in new tab / window

      目前,新浏览器支持一些网络邮件界面(如 Gmail、Yahoo Mail、AoL 等)。

      所以我们可以简单地打开一个新窗口(支持旧浏览器,新浏览器只会打开一个新选项卡)并使用 preventDefault 和默认链接重定向添加一个后备(如果是非 JavaScript 用户)。

      http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-flow-cancelation

      https://developer.mozilla.org/es/docs/DOM/event.preventDefault

      https://developer.mozilla.org/en-US/docs/Web/API/Window.open

      像这样:

      &lt;a onClick="javascript:window.open('mailto:mail@domain.com', 'mail');event.preventDefault()" href="mailto:mail@domain.com"&gt;Send a e-mail&lt;/a&gt;

      http://jsfiddle.net/cNUNP/

      感谢https://stackoverflow.com/a/9880404/1107020

      猜猜就是这样。

      你好,马科斯。

      【讨论】:

        【解决方案7】:

        有一个廉价的 html-hack 来解决这个问题.....

        一页上的链接...

        <a href="/mailto.html" target="_blank">Mail</a>
        

        在 mailto.html....

        <meta HTTP-EQUIV="REFRESH" content="0; url=mailto:who@website.com">
        
        If nothing pops up click.....<a href="mailto:who@website.com">Mail!</a>
        

        _blank 打开一个新的选项卡/窗口,然后元标记完成其余的工作。链接作为后备课程。

        【讨论】:

          【解决方案8】:

          您不需要为此使用 Javascript/Jquery。标准链接有效(由于存在错误,Firefox v30+ 除外,见下文)。

          <a href="mailto:example@example.com" target="_blank">
          

          从 Firefox 30 开始,由于bug 而无法在 Firefox 中运行。它在同一选项卡中打开并替换历史记录,因此回击不会将您带回到 mailto: 链接所在的页面。

          【讨论】:

          • 这是正确的。我正在努力寻找解决方案。 _blank 完全按照 Costa 所说的去做。我们如何绕过并在新选项卡或可能弹出的 javascript 窗口中打开 gmail 页面?
          • 历史记录已经过去了8个月,bug依然存在。
          • 2016 更新:错误仍未修复。最初于 2011 年开放,因此除非该错误获得大量赞成票(提示,提示),否则该问题是否会被修复:bugzilla.mozilla.org/show_bug.cgi?id=646552
          • 2017 更新:错误仍未修复。如果没有很多支持,我很可能永远不会被修复:bugzilla.mozilla.org/show_bug.cgi?id=646552
          • 2021 年更新:这个 10 年前的 Firefox 错误仍未修复。错误跟踪器中有一些最近的讨论,所以希望不会丢失。
          【解决方案9】:

          mailto 调用用户的默认电子邮件客户端。在任何情况下,它都不会打开窗口或选项卡。如果您想使用窗口或选项卡,您需要配置表单并允许表单在您的窗口/选项卡中打开。当然,您必须配置表单以使用服务器上可用的任何方法发送邮件。

          【讨论】:

          • 这在 2011 年可能是正确的,但现在不再正确了。您可以使用 target="_blank" 在新选项卡中打开 Gmail 等邮件客户端。不幸的是,这还不够,因为它会为使用独立客户端的人启动一个空白选项卡。
          • 如何在选项卡中打开 Outlook(最流行的电子邮件客户端)?始终可以在窗口或选项卡中打开基于 Web 的电子邮件服务。但基于网络的电子邮件服务并不是电子邮件客户端的主要部分。
          • 此答案已过时,某些邮件客户端在 gmail 或收件箱等选项卡中打开
          • @scott "mailto 调用用户的默认电子邮件客户端。它不会在任何情况下打开窗口或选项卡。"那部分过时了吗?
          • @MattMacLeod 没有。它没有过时。 Mailto仍然只是调用用户默认的电子邮件客户端。
          猜你喜欢
          • 2013-03-22
          • 1970-01-01
          • 2011-02-18
          • 2013-11-11
          • 2013-03-11
          • 2010-09-12
          • 1970-01-01
          相关资源
          最近更新 更多