在新标签/窗口中打开href mailto链接

时间:2011-12-18 04:28:36

标签: jquery razor href target mailto

我有一张图片,点击后,我想链接到mailto:

 <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方法也可以接受,谢谢)

9 个答案:

答案 0 :(得分:25)

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

答案 1 :(得分:18)

这个答案基于这个答案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

像这样:

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

http://jsfiddle.net/cNUNP/

归功于https://stackoverflow.com/a/9880404/1107020

猜猜就是这样。

问候,马科斯。

答案 2 :(得分:13)

你不需要Javascript / Jquery。标准链接有效(Firefox v30 +除外,因为有错误,见下文)。

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

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

答案 3 :(得分:10)

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

答案 4 :(得分:3)

我知道这是一个老问题,但如果找到,这个帖子有最好的答案。我修改了上面的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

答案 5 :(得分:1)

变体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

答案 6 :(得分:0)

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

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

答案 7 :(得分:-1)

您是否尝试过中键点击&#39; (&#34;在新标签中打开&#34;)? 它对我有用

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等人)进行测试

答案 8 :(得分:-2)

这个问题有一个廉价的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打开一个新的选项卡/窗口,其余的是metatag。链接作为后备的幕后。