问题
I am using a mailto:
filled in JavaScript to send information throughout my web application, but everytime a user presses the Send button, it opens a new tab in the browser before opening the mailing application (Outlook, Gmail, etc).
Is there any way to prevent the blank tab from opening?
Edit: This issue is encountered in all following major browsers : Internet Explorer, Firefox and Google Chrome.
I am using window.open()
to send emails, is there any known alternatives?
Here is how I send the email:
var mailto_link = 'mailto:'+email+'?subject='+subject+'&body='+body_message;
var win = window.open(mailto_link,'emailWindow');
I don't want to use window.location.href
since I am displaying a message after the user sent the email.
回答1:
Thank you for the edit. There is indeed an alternative:
window.location.href = "mailto:mail@domain.tld";
alert("Thank you!");
I don't want to use window.location.href since I am displaying a message after the user sent the email.
I did not really get this one. You are not leaving the website when using mailto:
with window.location.href
回答2:
The window.location.href solution by AmShaegar works pretty well but it caused side effect in a complex application I have been developping.
I finally came up with this solution one might be interested in:
$('<iframe src="mailto:mail@domain.tld">').appendTo('body').css("display", "none");
See this plunker: http://plnkr.co/edit/J0LvQU?p=preview
回答3:
The blank tab is opened by window.open()
. You don't need that.
The syntax for a mailto link should be something like
<a href="mailto:your@email.address?subject=Comments about the color blue">Contact Us</a>
See http://www.addressmunger.com/mailto_syntax_tutorial/ for more details.
回答4:
Just close the window after a short interval:
var mailto_link = 'mailto:'+email+'?subject='+subject+'&body='+body_message;
var win = window.open(mailto_link,'emailWindow');
setTimeout(function() { win.close() }, 500);
回答5:
Try naming the window (myWindow) and adding a close() command:
<script>
myWindow=window.open("mailto:emailaddress@example.com");
myWindow.close();
</script>';
This should close the extra browser window and keep the email application open. At least it worked for me.
回答6:
No, that strictly depends on how your browser handles new tabs. I've spent hours looking for a work around, solution, anything...
firefox: options -> tabs
safari: preferences -> tabs
回答7:
For the record:
create a anchor tag with the target attribute like this:
<div>
<a target="_self" href="mailto:mail1@domain1.com;%20mail2@domain2.com?subject=Mail%20sending&body=etc...">
Send Mail
</a>
</div>
回答8:
<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>
来源:https://stackoverflow.com/questions/13457684/how-to-prevent-mailto-event-from-opening-a-new-tab-in-browser