使用 JQuery / JavaScript 调用/单击 mailto 链接
Posted
技术标签:
【中文标题】使用 JQuery / JavaScript 调用/单击 mailto 链接【英文标题】:Invoke / click a mailto link with JQuery / JavaScript 【发布时间】:2011-04-21 13:33:34 【问题描述】:我想从 javascript 调用 mailto 链接——我想要一种方法,让我可以在用户 PC 上打开电子邮件客户端,就像他们点击了普通的 mailto 链接一样。
我该怎么做?
【问题讨论】:
工作示例:jsfiddle.net/gaboom/h81qov5g 试试<button onclick="window.open('mailto:KingRider<contato@sandroalvares.com.br>');">Contact me</button>
【参考方案1】:
你可以在这里使用window.location.href
,像这样:
window.location.href = "mailto:address@dmail.com";
【讨论】:
我将如何附加正文? mailto:address@dmail.com?body=myBody 和 mailto:address@dmail.com&myBody 对我不起作用... @jipiboily,你能解释一下吗?你试过哪个浏览器没用? @Adnan 我记得它不适用于 Opera 和更多的浏览器。根据您的需要,您或许可以解决该问题。 @Rolf 我刚刚在最新的 chrome stable 中进行了测试,仍然可以正常工作。 Max,您可能已经明白这一点,但对于未来的读者:window.location.href = 'mailto:address@dmail.com&subject=Hello there&body=This is the body';
。不是?
也不是&amp;
,只是&
【参考方案2】:
您可以通过在页面上使用带有链接的 .click() 来避免上面讨论的空白页面问题:
document.getElementById('mymailto').click();
...
<a href="mailto:...." id="mymailto" style="display:none"></a>
【讨论】:
我试过这个:`function Call() document.getElementById('mymailto').click(); ` 新标签仍然打开。【参考方案3】:对我来说,在 chrome、IE 和 firefox 以及 Outlook 中测试的工作答案是这样的
window.location.href = 'mailto:address@dmail.com?subject=Hello there&body=This is the body';
%0d%0a
是 mailto 链接中电子邮件正文的换行符
%20
是应该使用的空格符号,但它也适用于普通空格
【讨论】:
【参考方案4】:其实也有避免空白页的可能。
我发现,您可以简单地将带有 mailto 链接的 iframe 插入到 dom 中。 这适用于当前的 Firefox/Chrome 和 IE(IE 也会显示一个简短的确认对话框)。
使用 jQuery,我得到了这个:
var initMailtoButton = function()
var iframe = $('<iframe id="mailtoFrame" src="mailto:name@domain.com" border="0" frameborder="0"></iframe>');
var button = $('#mailtoMessageSend');
if (button.length > 0)
button.click(function()
// create the iframe
$('body').append(iframe);
//remove the iframe, we don't need it any more
window.setTimeout(function()
iframe.remove();
, 500);
);
【讨论】:
【参考方案5】:更好用
window.open('mailto:address@mail.com?subject=sub&body=this is body')
如果我们使用window.location.href
chrome 浏览器在网络选项卡中出现错误并显示临时标题
升级不安全请求:1
【讨论】:
这对我帮助很大,谢谢@Prabin Tp【参考方案6】:这是一个老问题,但我结合了几个堆栈溢出来提出这个功能:
//this.MailTo is an array of Email addresses
//this.MailSubject is a free text (unsafe) Subject text input
//this.MailBody is a free text (unsafe) Body input (textarea)
//SpawnMail will URL encode /n, ", and ', append an anchor element with the mailto, and click it to spawn the mail in the users default mail program
SpawnMail: function()
$("#MyMailTo").remove();
var MailList="";
for(i in this.MailTo)
MailList+=this.MailTo[i]+";";
var NewSubject=this.MailSubject.replace(/\n/g, "%0d%0a");
NewSubject=NewSubject.replace(/"/g, "%22");
NewSubject=NewSubject.replace(/'/g, "%27");
var NewBody=this.MailBody.replace(/\n/g, "%0d%0a");
NewBody=NewBody.replace(/"/g, "%22");
NewBody=NewBody.replace(/'/g, "%27");
$("#mainNavBar").after("<a id='MyMailTo' style='display:none;' href='mailto:"+MailList+"?subject="+NewSubject+"&body="+NewBody+"'> </a>");
document.getElementById('MyMailTo').click();
关于这个(以及我打算如何使用它)最酷的部分是我可以把它放在一个循环中,并将单独的消息拆分给数组中的每个人,或者让每个人都在一起(这是这个函数目前所做的)。 无论如何,感谢@Toskan 的提示
FOLLOW-UP - 请注意,新的 html5 标准不允许在没有“必需的用户手势”的情况下循环 mailto(或其他与弹出窗口相关的 js)。很酷的文章在这里:https://github.com/WICG/interventions/issues/12 因此,您不能使用它来大量生成单独的电子邮件,但在当前的设计中,它确实可以很好地发送给许多人。
【讨论】:
以上是关于使用 JQuery / JavaScript 调用/单击 mailto 链接的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 javascript/jquery/AJAX 调用 Django REST API?
如何找出使用 javascript/jquery 调用函数的次数?
使用 JQuery / JavaScript 调用/单击 mailto 链接