MailTo From Javascript

23,942

Solution 1

I don't think it's stupid at all! This is a good start. What I'd try next is just to create an actual link object in jquery, append it to the body, and then click() it.

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

Should work as long as the escape() function you're using gets rid of all of the quotes and correctly encodes the html.

But I have to say, this could be hard to get just right. If it still doesn't work, I'd recommend doing it server-side where the link POSTS all of the html needed.

Solution 2

If you're using jQuery, then you can easily create an element based on the markup you build (refer to this answer for an example) and then invoke the link's click event by simply doing this:

element.click();
Share:
23,942
Gordon Thompson
Author by

Gordon Thompson

I work in many languages such as C/Java/C#/Perl currently cutting my teeth on ASP.NET but I'm sure that'll change in 10 minutes time :) Edit : Have discovered JQuery and realised that I can do stuff in a day using JQuery and WebServices that took me a week to do in ASP.NET. Very happy :)

Updated on July 24, 2022

Comments

  • Gordon Thompson
    Gordon Thompson almost 2 years

    I've got a link button which is used to build up a mailto from the contents of the page. What is the best way to launch it from javascript without opening a blank window or disturbing the window it's called from?

    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");
        }
    }
    

    The simple function is above. window.location.href doesn't work properly unless it's Firefox/Chrome (it redraws the page in IE8). I've also tried window.open(sMailTo, "_self") but again in IE8 this breaks the page that it's called from.

    I'm sure this is a stupid question.... :-)

    Thanks