2011-03-10 62 views
13

我有一个链接按钮,用于从页面内容构建邮件。如何在不打开空白窗口或打扰窗口的情况下从JavaScript启动它的最佳方式是什么?MailTo来自Javascript

function Email() 
{ 
    var sMailTo = "mailto:"; 
    var sBody = ""; 

    var alSelectedCheckboxes = new Array(); 
    $("input:checkbox[CheckBoxType=Email]:checked").each(function() 
    { 
     alSelectedCheckboxes.push($(this).val()); 
    }); 

    if (alSelectedCheckboxes.length > 0) 
    { 
     for (var i=0; i<alSelectedCheckboxes.length; i++) 
     { 
      sBody += alSelectedCheckboxes[i]; 
      sBody += "\n"; 
     } 

     sMailTo += escape("<Insert Recipients Here>") +"?subject=" +escape("<Insert Subject Here>") +"&body=" +escape(sBody); 
     window.location.href = sMailTo; 
    } 
    else 
    { 
     alert("Please select some results"); 
    } 
} 

简单的功能就在上面。 window.location.href不能正常工作,除非它是Firefox/Chrome(它在IE8中重新绘制页面)。我也尝试过window.open(sMailTo,“_self”),但是在IE8中这又打破了它被调用的页面。

我敢肯定,这是一个愚蠢的问题.... :-)

感谢

+2

不要以用户的名义安静地做这件事。将它添加为html链接。 – Raynos 2011-03-10 20:05:05

+0

javascript是由链接执行的。 mailto的内容是动态的,所以我们需要先做一点javascript来确定发送邮件的正文 – 2011-03-10 21:06:08

回答

9

我不认为这是愚蠢了!这是一个好的开始。接下来我会尝试的仅仅是在jQuery中创建一个实际的链接对象,将其附加到正文,然后单击()。

//window.location.href = sMailTo; 
$('<a href="' + sMailTo + '">click</a>').appendTo('body').click().remove(); 

只要将正常运行的Escape()函数你使用摆脱所有的报价和正确编码的HTML。

但是我不得不说,这可能很难得到只是没错。如果它仍然不起作用,我建议在服务器端进行链接POSTS所需的所有html。

3

如果你使用jQuery,那么你可以根据你建立的标记轻松创建一个元素(指this answer为例),然后通过简单地做这个调用链接的点击事件:

element.click(); 
+0

Safari会阻止允许触发click()事件! – Anirban 2014-04-02 23:48:34