web-dev-qa-db-fra.com

Comment empêcher l'événement mailto d'ouvrir un nouvel onglet dans le navigateur

J'utilise un code JavaScript rempli avec mailto: pour envoyer des informations via mon application Web, mais chaque fois qu'un utilisateur appuie sur le bouton Envoyer , un nouvel onglet s'ouvre dans le navigateur avant d'ouvrir l'application de mailing (Outlook, Gmail, etc.).

Existe-t-il un moyen d'empêcher l'ouverture de l'onglet vide?


Edit: Ce problème se rencontre dans tous les principaux navigateurs suivants: Internet Explorer, Firefox et Google Chrome.

J'utilise window.open() pour envoyer des courriels. Existe-t-il des alternatives connues?

Voici comment j'envoie l'e-mail:

var mailto_link = 'mailto:'+email+'?subject='+subject+'&body='+body_message;
var win = window.open(mailto_link,'emailWindow');

Je ne souhaite pas utiliser window.location.href, car j'affiche un message après que l'utilisateur a envoyé le courrier électronique.

25
Jeff Noel

Merci pour l'édition. Il y a bien une alternative:

window.location.href = "mailto:[email protected]";
alert("Thank you!");

Je ne veux pas utiliser window.location.href puisque j'affiche un message après que l'utilisateur a envoyé l'e-mail.

Je n'ai pas vraiment eu celui-ci. Vous ne quittez pas le site Web lorsque vous utilisez mailto: avec window.location.href

24
AmShaegar

La solution window.location.href d’AmShaegar fonctionne plutôt bien, mais elle a des effets secondaires dans une application complexe que je développe.

J'ai finalement trouvé cette solution qui pourrait intéresser:

$('<iframe src="mailto:[email protected]">').appendTo('body').css("display", "none");

Voir ce lecteur: http://plnkr.co/edit/J0LvQU?p=preview

7
Guillaume

L'onglet vide est ouvert par window.open(). Tu n'as pas besoin de ça.

La syntaxe pour un lien mailto devrait être quelque chose comme

<a href="mailto:[email protected]?subject=Comments about the color blue">Contact Us</a>

Voir http://www.addressmunger.com/mailto_syntax_tutorial/ pour plus de détails.

4
Samuel Rossille

Fermez la fenêtre après un court intervalle:

var mailto_link = 'mailto:'+email+'?subject='+subject+'&body='+body_message;
var win = window.open(mailto_link,'emailWindow');
setTimeout(function() { win.close() }, 500);
3
CpnCrunch

Essayez de nommer la fenêtre (myWindow) et d’ajouter une commande close ():

<script>
    myWindow=window.open("mailto:[email protected]");
    myWindow.close();
</script>';

Cela devrait fermer la fenêtre supplémentaire du navigateur et laisser l'application de messagerie ouverte. Au moins cela a fonctionné pour moi.

2
ezchx

Pour mémoire:

créez une balise d'ancrage avec l'attribut target comme ceci:

<div>
    <a target="_self" href="mailto:[email protected];%[email protected]?subject=Mail%20sending&body=etc...">
        Send Mail
    </a>
</div>
1
LeandroP

Non, cela dépend strictement de la manière dont votre navigateur gère les nouveaux onglets. J'ai passé des heures à chercher un travail, une solution, n'importe quoi ...

firefox: options -> onglets

safari: préférences -> onglets

0
<a className="prom-links-anchor" tabIndex="0" aria-label="Email" href={ "mailto:" + eid + "@yahoo.com"}   
   role="link" nocm="true" title={ "Email"} rel="email" data-cs={contentSource} data={resultPosition + 1} 
   onMouseDown={this.handleMouseDown.bind(this)} onKeyDown={this.handleKeyPressEvent.bind(this)} 
   onContextMenu={e=> e.preventDefault()}
  >
  <div className="icon-email" title="Email" href={"mailto:" + eid + "@yahoo.com"} rel="email" 
       data-cs={contentSource} data={resultPosition + 1} />
  <div className="icon-label-email" aria-hidden="true" href={"mailto:" + eid + "@yahoo.com"} 
       title={"Email"} rel="hc-email" data-cs={contentSource} data={resultPosition + 1}
    >Email</div>
</a>
0
Laarni Cortez