it-swarm-pt.tech

Abra o link href mailto na nova guia/janela

Eu tenho uma imagem que quando clico, eu quero linkar para um mailto:

 <a id="mailto" href="mailto:[email protected]" target="_newtab" >
        <img src="@Url.Content("~/Content/HomePage/email.png")" alt="email" /></a>

No entanto, atualmente, uma vez clicado, ele ativará a opção de email para escolher um aplicativo mailto e, quando eu escolher, o link mailto estará aberto na guia atual. Isso fará com que o usuário saia do aplicativo.

Então, eu quero que a página para enviar e-mail (por gmail, yahoo, etc) seja aberta em nova aba ou em uma janela. Alguma idéia de como fazer isso? Eu tentei os dois target = "_ newtab" e target = "_ blank", mas ambos não funcionaram.

Qualquer ajuda será muito apreciada .. Obrigado ...

(O método jQuery também é aceitável se não houver outra maneira, obrigado)

17
shennyL

mailto chama o cliente de email padrão do usuário. Não abre uma janela ou guia em nenhuma instância. Se você quiser usar uma janela ou guia, precisará configurar um formulário e permitir que o formulário seja aberto na janela/guia. Claro, você terá que configurar o formulário para enviar e-mail com qualquer método disponível no seu servidor.

10
Scott

essa informação está desatualizada, agora é possível, creio eu, já que o gmail e outros agora funcionam através de links de navegadores. no entanto, há o problema de você querer que ele seja aberto em uma nova guia se NÃO for aberto em um cliente de email do sistema e aberto em uma nova guia se for um cliente de webmail, caso contrário os usuários do Outlook verão uma guia em branco. que é desorientador, especialmente porque são usuários do Outlook.

23
RedScourge

Esta resposta é baseada nesta resposta Abra o link href mailto na nova aba/janela .

Agora, os novos navegadores suportam interfaces de some webmail (como Gmail, Yahoo Mail, AoL, etc.).

Assim, podemos simplesmente abrir uma nova janela (suporte a navegador mais antigo, novos navegadores apenas abrirão uma nova guia) e adicionar um fallback (no caso de usuário não-javascript) usando preventDefault e redirecionamento de link padrão.

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/pt-BR/docs/Web/API/Window.open

Igual a:

<a onClick="javascript:window.open('mailto:[email protected]', 'mail');event.preventDefault()" href="mailto:[email protected]">Send a e-mail</a>

http://jsfiddle.net/cNUNP/

Crédito para https://stackoverflow.com/a/9880404/1107020

Acho que é tudo.

Saudações, Marcos.

17
Marcos Eusebi

Você não precisa de Javascript/Jquery para isso. Um link padrão funciona (exceto o Firefox v30 + devido a um bug, veja abaixo).

<a href="mailto:[email protected]" target="_blank">

A partir do Firefox 30, não funciona no Firefox devido a um bug . Ele é aberto na mesma guia E substitui o histórico, por isso, o retorno não o levará de volta à página em que o link mailto: foi.

13
Costa

Eu sei que esta é uma pergunta antiga, mas esse segmento tinha o melhor conjunto de respostas, se encontrado. Modifiquei a resposta de Marcos acima para também fechar a guia em branco que é criada se o cliente tiver um manipulador de email externo

referência de resposta

JS (w\jQuery para manipuladores de eventos)

$(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

2
Sampson Crowley

Variante 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('[email protected]', 'Subject', 'Body');event.preventDefault()">[email protected]</a>

Variante 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:[email protected]?subject=Subject&body=Body" onclick="mailto(this);event.preventDefault()">[email protected]</a>

Variante 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:[email protected]?subject=Subject&body=Body" id="mailto">[email protected]</a>

Variante 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:[email protected]?subject=Subject&body=Body" target="_blank">[email protected]</a>

Atributo de segmentação HTML: https://www.w3schools.com/tags/att_a_target.asp

0
Botyk