2011-03-10 24 views
13

Tengo un botón de enlace que se utiliza para crear un mailto a partir del contenido de la página. ¿Cuál es la mejor manera de iniciarlo desde javascript sin abrir una ventana en blanco o alterar la ventana a la que se llama?MailTo from 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"); 
    } 
} 

La función simple es anterior. window.location.href no funciona correctamente a menos que sea Firefox/Chrome (vuelve a dibujar la página en IE8). También probé window.open (sMailTo, "_self") pero de nuevo en IE8 esto rompe la página desde la que se llama.

Estoy seguro de que esto es una pregunta estúpida .... :-)

Gracias

+2

No haga esto en silencio en nombre del usuario. Agréguelo como un enlace html. – Raynos

+0

el javascript se ejecuta mediante un enlace. Los contenidos de mailto son dinámicos, sin embargo, así que primero tenemos que hacer un poco de javascript para averiguar qué enviar, ya que el cuerpo del correo electrónico –

Respuesta

9

no creo que es estúpido en absoluto! Este es un buen comienzo. Lo que intentaré a continuación es simplemente crear un objeto de enlace real en jquery, anexarlo al cuerpo y luego hacer clic en().

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

debería funcionar siempre y cuando el escape() que estás usando se deshace de todas las citas y codifica correctamente el html.

Pero tengo que decir que esto podría ser difícil de obtener solo derecho. Si todavía no funciona, recomendaría hacerlo en el lado del servidor donde el enlace PUBLICA todo el html necesario.

3

Si está utilizando jQuery, entonces usted puede crear fácilmente un elemento basado en el margen de beneficio a construir (se refieren a this answer para un ejemplo) y luego invocar el evento de clic en el enlace simplemente hacer esto:

element.click(); 
+0

Safari evitaría que se desate el evento click(). – Anirban