MailTo From Javascript
Asked Answered
E

2

14

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

Erv answered 10/3, 2011 at 20:2 Comment(2)
Don't do this quietly on behalf of the user. Add it as a html link.Annamariaannamarie
the javascript is executed by a link. The mailto contents are dynamic however so we need to do a little javascript first to figure out what to send as the body of the emailErv
A
10

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.

Alike answered 10/3, 2011 at 20:9 Comment(0)
I
3

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();
Idiomatic answered 10/3, 2011 at 20:8 Comment(1)
Safari would prevent from allowing to fire the click() event !Draughtsman

© 2022 - 2024 — McMap. All rights reserved.